@vertigis/arcgis-extensions 53.16.1 → 53.17.0
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/data/convert.d.ts +1 -1
- package/data/convert.js +1 -1
- package/data/support/_lpkxConverter.js +1 -1
- package/declarations/arcgis-js-api-extensions/index.d.ts +4 -0
- package/docs/html/assets/navigation.js +1 -1
- package/docs/html/assets/search.js +1 -1
- package/docs/html/functions/{data_support_fgdbConverter.createFgdbLayer.html → data_support__fgdbConverter.createFgdbLayer.html} +2 -2
- package/docs/html/functions/{data_support_fgdbConverter.extractLayerTitle.html → data_support__fgdbConverter.extractLayerTitle.html} +1 -1
- package/docs/html/functions/{data_support_fgdbConverter.getGeometryDrawPriority.html → data_support__fgdbConverter.getGeometryDrawPriority.html} +1 -1
- package/docs/html/functions/support_observableUtils.watch.html +2 -0
- package/docs/html/functions/support_observableUtils.watchEach.html +2 -0
- package/docs/html/interfaces/data_convert.FgdbToLayerExtensionsOptions.html +2 -2
- package/docs/html/interfaces/{data_support_fgdbConverter.DynamicLayerMetadataResponse.html → data_support__fgdbConverter.DynamicLayerMetadataResponse.html} +2 -2
- package/docs/html/interfaces/{data_support_fgdbConverter.GeoProcessedFgdbData.html → data_support__fgdbConverter.GeoProcessedFgdbData.html} +5 -5
- package/docs/html/modules/data_support__fgdbConverter.html +6 -0
- package/docs/html/modules.html +1 -1
- package/docs/html/variables/version.version.html +1 -1
- package/package.json +1 -1
- package/support/observableUtils.d.ts +6 -0
- package/support/observableUtils.js +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/docs/html/modules/data_support_fgdbConverter.html +0 -6
- /package/data/support/{fgdbConverter.d.ts → _fgdbConverter.d.ts} +0 -0
- /package/data/support/{fgdbConverter.js → _fgdbConverter.js} +0 -0
package/data/convert.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { GeometryType } from "../support/esri.js";
|
|
|
10
10
|
import { DateFormat, NumberFormat, TimeFormat } from "../utilities/format/formats.js";
|
|
11
11
|
import { FeatureSet } from "./FeatureSet.js";
|
|
12
12
|
import type { IDxfJsonComponentContext } from "./support/_dxfInterfaces.js";
|
|
13
|
-
import { type GeoProcessedFgdbData } from "./support/
|
|
13
|
+
import { type GeoProcessedFgdbData } from "./support/_fgdbConverter.js";
|
|
14
14
|
import type { GeoProcessedLpkxData } from "./support/lpkxInterfaces.js";
|
|
15
15
|
/**
|
|
16
16
|
* A union of simple fill, line, and marker symbols.
|
package/data/convert.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@arcgis/core/Color.js";import t from"@arcgis/core/Graphic.js";import r from"@arcgis/core/geometry/Point";import o from"@arcgis/core/geometry/Polygon.js";import n from"@arcgis/core/geometry/Polyline.js";import a from"@arcgis/core/geometry/SpatialReference";import i from"@arcgis/core/layers/FeatureLayer.js";import s from"@arcgis/core/layers/GroupLayer.js";import c from"@arcgis/core/layers/support/Field.js";import l from"@arcgis/core/renderers/SimpleRenderer.js";import m from"@arcgis/core/renderers/UniqueValueRenderer.js";import u from"@arcgis/core/renderers/support/UniqueValueInfo.js";import f from"@arcgis/core/symbols/MeshSymbol3D.js";import p from"@arcgis/core/symbols/PictureMarkerSymbol.js";import y from"@arcgis/core/symbols/SimpleFillSymbol.js";import d from"@arcgis/core/symbols/SimpleLineSymbol.js";import g from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import w from"dxf-parser";import{geometryTypeToJson as h}from"../json/GeometryJson.js";import{translate as F}from"../locale/language.js";import{INVARIANT as S}from"../locale.js";import{FeatureCollectionLayerExtension as N}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as T}from"../mapping/GroupLayerExtension.js";import{MapImageLayerExtension as O}from"../mapping/MapImageLayerExtension.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{Time as b}from"../utilities/Time.js";import{checkArg as D,assertNever as M}from"../utilities/checkArg.js";import{isPoint as E,isMultipoint as R,isPolyline as A,isPolygon as I,isExtent as G}from"../utilities/esri.js";import{parse as _,format as C,DEFAULT_PARSING_FORMATS as L,INVALID_DATE as v}from"../utilities/format/date.js";import{DateFormat as P,NumberFormat as j,TimeFormat as U}from"../utilities/format/formats.js";import{parse as $,format as B}from"../utilities/format/number.js";import{parse as H,format as k,DEFAULT_PARSING_FORMATS as z}from"../utilities/format/time.js";import{project as J,esriToWKT as X,wktToEsri as W,esriWkidToWkt as q,esriWktToWkid as Y,esriToGeoJSON as Z,geoJSONToEsri as K}from"../utilities/geometry.js";import{getLogger as V}from"../utilities/log.js";import{isNumeric as Q}from"../utilities/number.js";import{delay as ee}from"../utilities/promise.js";import{caseInsensitiveEquals as te}from"../utilities/string.js";import{Feature as re}from"./Feature.js";import{FeatureSet as oe}from"./FeatureSet.js";import{DxfEntityProcessor as ne}from"./support/_dxfConverters.js";import{createGpxDocument as ae,serializeGpxDocument as ie,buildGpxTrack as se,buildGpxTrackPoint as ce,buildGpxWaypoint as le,getGpxExtensions as me,getGpxTrackDescription as ue,getGpxTrackName as fe,getGpxTrackTime as pe,getGpxTrackId as ye}from"./support/_gpxExport.js";import{createLpkxLayer as de}from"./support/_lpkxConverter.js";import{createFgdbLayer as ge}from"./support/fgdbConverter.js";const we=["=","-","+","@"],he='"',Fe="\r\n",Se="\n",Ne=[...L.map(et),"M/d/yy"],Te=[...z.map(rt).map((e=>e.replace("AM/PM","tt")))],Oe=/(\w+)_(point|multipoint|polyline|polygon)z?/;var xe;function be(){return V("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(xe||(xe={}));export const FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g;export var GeometryFormat;!function(e){e.NONE="NONE",e.WKT="WKT",e.XY="XY",e.XYZ="XYZ",e.LAT_LON="LAT_LONG",e.GEO_JSON="GEO_JSON",e.ARCGIS_JSON="ARCGIS_JSON"}(GeometryFormat||(GeometryFormat={}));export const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["latitude","longitude"],["lat","lon"],["lat","long"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};const De=[[GeometryFormat.ARCGIS_JSON,ze],[GeometryFormat.GEO_JSON,Je],[GeometryFormat.WKT,Xe]],Me=new Map(De);export async function uploadDataToFeatureSet(e){const t=await async function(e){const{data:t,includeHeaderRow:o,geometryFormat:n,geometryFields:a,locale:i,numberFormat:s,inSpatialReference:c}=e,l=o?t.slice(1):t;if(n===GeometryFormat.NONE)return{columnIndices:[]};const m=e=>Ye(e,i,s),u=(e,t)=>{const o=t===GeometryFormat.XYZ,n=t===GeometryFormat.LAT_LON;return{columnIndices:e,geometries:l.map((t=>{if(t.length>=Math.max(...e)&&Q(t[e[0]]?.raw,i)&&Q(t[e[1]]?.raw,i)&&(!o||Q(t[e[2]]?.raw,i)))return new r({x:m(n?t[e[1]].raw:t[e[0]].raw),y:m(n?t[e[0]].raw:t[e[1]].raw),z:o?m(t[e[2]].raw):0,spatialReference:c})}))}},f=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),c)})))}),p=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return u(e,t);case GeometryFormat.ARCGIS_JSON:return f(e[0],ze);case GeometryFormat.GEO_JSON:return f(e[0],Je);case GeometryFormat.WKT:return f(e[0],Xe);default:return M(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=We(o?t[0]:t[0].map(((e,t)=>({raw:t.toString()}))),n,o?a:a.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(o&&void 0===e)throw new Error(`Error parsing file data: Expected geometry columns ${geometryTypeHeaders[n][0].join(",")} are missing for GeometryType.${n}`);return p(e??[0],n)}const[y,d]=await Ze(t,c,o);if(y===GeometryFormat.NONE)return{columnIndices:[]};return d.length>1?u(d,y):f(d[0],Me.get(y))}(e),o=function(e,t){const{data:r,displayField:o,includeHeaderRow:n,inSpatialReference:a,outSpatialReference:i,generatePrimaryKey:s}=e,c={fields:[]},l=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:m}=e,u=0;for(let t=0;t<r[0].length;t++){if(l(t))continue;const o=Ve(e,t,!s&&!m&&!c.fields.find((e=>"esriFieldTypeOID"===e.type)));let a=r[0][t]?.raw?.toString(),i=a?.replace(FIELD_NAME_REGEX,"_");n&&i||(i="field"+ ++u,a=F("gcx.api.data.convert.import-field-alias",u)),c.fields.push({alias:a,name:i,type:o}),"esriFieldTypeOID"===o&&(m=i)}if(c.spatialReference=i??t.geometries?.[0]?.spatialReference??a,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];c.geometryType=e.every((e=>e===r))?h(r):void 0}if(!c.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=c.fields.length+1,t=!!c.fields.find((e=>"objectid"===e.name.toLowerCase()));m=t?`OBJECTID_${e}`:"OBJECTID",c.fields.push({name:m,alias:m,type:"esriFieldTypeOID"})}return c.displayField=o??c.fields.find((e=>!te(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!te(e.name,m)))?.name??m,c.primaryKeyField=m,c}(e,t),n=await async function(e,t,r){const{data:o,includeHeaderRow:n,outFields:a,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:l,timeFormat:m}=e,{spatialReference:u}=r,f=[],p=n?o.slice(1):o,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(p.map((async(e,o)=>{const n=new re;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(a.includes("*")||a.filter((e=>te(e,u.name))).length>0){let e=await Qe(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:l,numberFormat:c,timeFormat:m,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=o),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await ve(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new oe({features:n,schema:o})}export async function toCsv(e,t){D("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:P.ROUND_TRIP,timeFormat:U.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:a.WGS84,includeHeaderRow:!0,outFields:Ce(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?Fe:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:i,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=Ge(r,o),f=_e(r,c,e.schema,!0),p=_e(r,c,e.schema,!1);if(i){const e=[];for(const t of u)e.push(Pe(t,o));for(const t of f)e.push(Pe(t,o));for(const t of p)e.push(Pe(t,o));const t=e.join(s)+l;m.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>{const o=Ue(e,t,r),n=e.schema.findFieldByName(t)?.type;return Pe(je(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await Le(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":je(e,t))));return r.map((e=>""===e?"":Pe(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...p.map((e=>r(e,o))));const n=`${t.join(s)}${l}`;m.push(n)})));return new Blob(m,{type:"text/plain",endings:"\n"===l||l===Fe?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(D("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsText(e)}));r=await t}else r=e;const o=Re(t),n=o.rowDelimiter||function(e){let t=Se;return ke(e,Fe,((r,o)=>(0===r&&o===e.length||(t=Fe),!1))),t}(r),a=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(ke(e,t,((t,r)=>(r!==e.length||t!==r)&&(n.push(e.substring(t,r)),n.length<3))),0===n.length)return o;let a=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>n[0].includes(e.delimiter)));if(0===a.length)return o;for(const e of n)for(const t of a){let o=0,n=0;ke(e,t.delimiter,((a,i)=>{if(i!==e.length&&o++,","===t.delimiter){const t=e.charAt(i-1),o=e.charAt(i+1);Q(t,r)&&Q(o,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(o),","===t.delimiter&&t.rowsNumberAdjacentOccurrences.push(n)}if(a=a.filter((e=>e.rowsDelimiterOccurrences.every((t=>e.rowsDelimiterOccurrences[0]===t)))).sort(((e,t)=>t.rowsDelimiterOccurrences[0]-e.rowsDelimiterOccurrences[0])),a.length>1&&","===a[0].delimiter&&null!=r&&r!==S){const e=a[0];if(null!=e&&","===e.delimiter&&","===Intl.NumberFormat(r).formatToParts(1.1).find((e=>"decimal"===e.type))?.value)for(let t=0;t<e.rowsDelimiterOccurrences.length;t++)if(e.rowsDelimiterOccurrences[t]<=e.rowsNumberAdjacentOccurrences[t]){a=a.filter((e=>","!==e.delimiter));break}}if(0===a.length)return o;return a[0].delimiter}(r,n,t.locale),i=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return ke(e,r,((r,n)=>{const a=e.substring(r,n);return o.push({raw:He(a,t,o.length)}),!0})),o};if(ke(e,t,((t,r)=>{const a=e.substring(t,r);return a.length>0&&o.push(n(a,o.length)),!0})),o.length){const e=o[0].length;o.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return o}(r,n,a);let{geometryFormat:s,geometryFields:c}=t;if(!s){const[e,t]=await Ze(i,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?i[0][e]?.raw??F("gcx.api.data.convert.import-field-alias",(e+1).toString()):F("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:i,...o,geometryFormat:s,geometryFields:c}}export async function csvToFeatureSet(e,t){const r=Re(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toGpx(e){D("featureSet",e).isNotMissing();const t=Array.from(e),r=ae(),o=r.documentElement,n=new Set;for(const e of t){if(!e.geometry)continue;const t=await ve(e.geometry,a.WGS84),i={name:fe(e),desc:ue(e),time:pe(e),extensions:me(r,e),id:ye(e)};if(E(t))o.appendChild(le(r,t.y,t.x,t.hasZ?t.z:void 0,i));else if(A(t))for(const e of t.paths){if(e.length<2)continue;const n=e.map((([e,o,n])=>ce(r,o,e,t.hasZ?n:void 0)));o.appendChild(se(r,n,i))}else n.add(t.type)}if(n.size>0){const e=Array.from(n).join(", ");be().warn(`One or more features with unsupported geometry types (${e}) were ignored during GPX conversion. GPX format only supports points and polylines.`)}const i=ie(r);return new Blob([i],{type:"application/gpx+xml"})}export async function toXLSX(e,t){D("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:Ce(e.source),outSpatialReference:a.WGS84,dateFormat:P.DEFAULT,timeFormat:U.DEFAULT,numberFormat:j.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=Ge(r,o),u=_e(r,n,e.schema,!0),f=_e(r,n,e.schema,!1),p=await import("xlsx"),y=p.utils.sheet_new();let d=!1;if(i){const t=m.concat(u).concat(function(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>te(t.name,e)))?.alias??e))}(f,e.source));d=!0,p.utils.sheet_add_aoa(y,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await Le(e.geometry,o));for(const r of u){const n=nt(e.attributes.get(r),o);t.push(n)}for(const a of f){const i=Ue(e,a,o);if(i instanceof b){const o=e.schema.findFieldByName(a);"time-only"===o?.type&&r.add(t.length)}else if(i instanceof Date){const r=e.schema.findFieldByName(a);"date-only"===r?.type&&n.add(t.length)}const s=nt(i,o);t.push(s)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void be().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(y,[t],{cellDates:!0,origin:d?-1:void 0}),d=!0;const a=p.utils.decode_range(y["!ref"]);for(let e=a.s.c;e<=a.e.c;e++){const t=y[p.utils.encode_cell({r:a.e.r,c:e})];"d"===t.t?r.has(e)?t.z=rt(c??U.ROUND_TRIP):n.has(e)?t.z=tt(s??P.ROUND_TRIP):t.z=et(s??P.ROUND_TRIP):"n"===t.t&&(t.z=ot(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=y;const w=p.write(g,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),h=new Uint8Array(w.length);for(let e=0;e<w.length;e++)h[e]=w.charCodeAt(e);return new Blob([h.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){D("xlsxData",e).isNotMissing();const r=Ae(t),o=await async function(e,t){const r=await import("xlsx"),o=new Promise(((o,n)=>{const a=new FileReader;a.onload=()=>{const e=new Uint8Array(a.result);let n="";for(const t of e)n+=String.fromCharCode(t);const i=r.read(n,{type:"binary",cellDates:!0}),s=t.sheetName||i.SheetNames[0],c=i.Sheets[s];o(c)},a.onerror=()=>{n(a.error)},a.readAsArrayBuffer(e)})),n=await o,a=r.utils.decode_range(n["!ref"]),i=[];for(let e=a.s.r;e<=a.e.r;e++){const t=[];for(let o=a.s.c;o<=a.e.c;o++){const a=n[`${r.utils.encode_cell({r:e,c:o})}`];a&&"d"===a.t&&a.v instanceof Date&&(a.v=new Date(a.v.getTime()+6e4*a.v.getTimezoneOffset())),t.push(a?{raw:a.v,formatted:"s"===a.t?void 0:a.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:n,geometryFields:a}=t;if(!n){const[e,t]=await Ze(o,r.inSpatialReference,r.includeHeaderRow);n=e,a=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??F("gcx.api.data.convert.import-field-alias",(e+1).toString()):F("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:a}}export async function xlsxToFeatureSet(e,t){D("xlsxData",e).isNotMissing();const r=Ae(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}export function kmlHexToEsriColor(t){return e.fromHex(`#${t.match(/.{2}/g).reverse().join("")}`)}export function parseKMLCoordinates(e){return e.trim().split(/\s+/).map((e=>{const[t,r,o]=e.split(",").map(Number);return{x:t,y:r,z:o}}))}export function parseKMLSymbol(t,r,o){if(t){const r=t.querySelector("IconStyle > Icon > href")?.textContent;if(r)return new p({url:r,width:32,height:32});const o=t.querySelector("PolyStyle");if(o){const t=o.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]);return new y({color:r,outline:{color:[0,0,0,.5],width:1}})}const n=t.querySelector("LineStyle");if(n){const t=n.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]),o=parseFloat(n.querySelector("width")?.textContent||"1");return new d({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){D("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),n=Array.from(e),i={...{useFormattedValues:!1,outFields:Ce(e.source),fileName:e.title||"export"},...t},{outFields:s,outSpatialReference:c,fileName:l}=i,m=e=>e.geometry.hasZ||e.geometry.hasM,u=new Map,f=n.filter((e=>E(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const p=n.filter((e=>R(e.geometry)));u.set("MULTIPOINTZ",p.filter(m)),u.set("MULTIPOINT",p.filter((e=>!m(e))));const y=n.filter((e=>A(e.geometry)));u.set("POLYLINEZ",y.filter(m)),u.set("POLYLINE",y.filter((e=>!m(e))));const d=n.filter((e=>I(e.geometry)||G(e.geometry)));u.set("POLYGONZ",d.filter(m)),u.set("POLYGON",d.filter((e=>!m(e))));const g=_e(n,s,e.schema,!0);let w=_e(n,s,e.schema,!1);w=g.concat(w);const h=new r,F=Array.from(u.keys()).filter((e=>u.get(e).length>0));await Promise.all(F.map((async t=>{const r=u.get(t),n=await Promise.all(r.map((e=>ve(e.geometry,c)))),s=await async function(e){const{wkid:t,wkt:r}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===t&&e.spatialReference.wkt===r)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return r??await q(t??a.WGS84.wkid)}(n),m=i.useFormattedValues?Object.assign({},...w.map((e=>({[e]:xe.STRING})))):function(e,t,r,o){const n={};for(const a of t){if(e.some((e=>$e(e,a)))){n[a]=xe.STRING;continue}const t=r?r.fields.find((e=>te(e.name,a))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[a]=xe.NUMBER;break;case"date":case"timestamp-offset":n[a]=o?xe.NUMBER:xe.DATE;break;default:n[a]=xe.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,a)instanceof Date||void 0===i(e,a)))&&e.some((e=>i(e,a)instanceof Date))?n[a]=o?xe.NUMBER:xe.DATE:e.every((e=>"number"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"number"==typeof i(e,a)))?n[a]=xe.NUMBER:e.every((e=>"boolean"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"boolean"==typeof i(e,a)))?n[a]=xe.BOOLEAN:n[a]=xe.STRING}return n}(r,w,e.schema,"timestamp"===i.dateFormat),f=function(e){return e.map((e=>{if(E(e)){const{x:t,y:r,z:o,m:n}=e,a=[t,r];return e.hasZ&&a.push(o),e.hasM&&a.push(n),at(a,e)}if(R(e))return it(e.points,e);if(A(e))return st(e.paths,e);if(I(e))return st(e.rings,e);if(G(e)){const t=[e.xmin,e.ymax];return[[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]]}throw new Error("Unsupported geometry type.")}))}(n),p=function(e,t,r,o){const n=[];for(const a of e){const e={};for(const n of t){let t=Ue(a,n,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=ct(t,r[n],{...o,isDateOnly:"date-only"===a.schema.findFieldByName(n)?.type})}e[n.replaceAll(".","_")]=t}n.push(e)}return n}(r,w,m,i);o.write(p,t,f,((e,r)=>{const o=F.length>1?`${l}_${t.toLowerCase()}`:l;h.file(`${o}.shp`,r.shp.buffer,{binary:!0}),h.file(`${o}.shx`,r.shx.buffer,{binary:!0}),h.file(`${o}.dbf`,r.dbf.buffer,{binary:!0}),h.file(`${o}.prj`,s)}))})));const S=await h.generateAsync({type:"uint8array"});return new Blob([S.buffer],{type:"text/plain"})}export async function kmlToLayerExtensions(e){D("blob",e).isNotMissing();const a=await e.text(),l=(new DOMParser).parseFromString(a,"application/xml"),m=function(e,a,u=!1){const f={};l.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const p=e.querySelector(":scope > name")?.textContent??"Unnamed Container",y=new Map;e.querySelectorAll(":scope > Placemark").forEach(((e,i)=>{const s=e.querySelector("name")?.textContent??"",c=e.querySelector("description")?.textContent??"",l=function(e){const t=e.querySelector("Point > coordinates"),a=e.querySelector("LineString > coordinates"),i=e.querySelector("Polygon");if(t?.textContent){const[e]=parseKMLCoordinates(t.textContent.replace(/ /g,""));return new r(e)}if(a?.textContent)return new n({paths:[parseKMLCoordinates(a.textContent).map((({x:e,y:t})=>[e,t]))]});if(i?.textContent){const e=i.querySelector("outerBoundaryIs > LinearRing > coordinates");if(e?.textContent){const t=[parseKMLCoordinates(e.textContent).map((({x:e,y:t})=>[e,t]))];return new o({rings:t})}}return}(e);if(l?.type){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:e.querySelector("Style"),l.type,a);y.has(l.type)||y.set(l.type,{graphics:[],symbols:[]});let n=function(e,t){for(let r=0;r<e.length;r++)if(lt(e[r],t))return r;return-1}(y.get(l.type).symbols,o);-1===n&&(y.get(l.type).symbols.push(o),n=y.get(l.type).symbols.length-1),y.get(l.type).graphics.push(new t({geometry:l,attributes:{name:s,description:c,SymbolID:n,OBJECTID:p+i}}))}}));const d=e.querySelectorAll(":scope > Folder, :scope > Document");if(u||1!==y.size||0!==d.length){const e=new T({layer:new s({title:p})});return y.forEach(((t,r)=>{const o=new i({displayField:"name",title:`${r.slice(0,1).toUpperCase()+r.slice(1)}s`,source:t.graphics,renderer:mt(t.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]}),n=new N({layer:o});e.layerExtensions.add(n)})),d.forEach(((t,r)=>{const o=m(t,r);e.layerExtensions.add(o)})),e}{const e=[...y.values()][0],t=new i({displayField:"name",title:p,source:e.graphics,renderer:mt(e.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]});return new N({layer:t})}},u=[];return l.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=m(e,t,!0);r.layerExtensions.length&&u.push(r)})),u}export async function lpkxToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedLpkxData:o}=t;D("options.lpkxBlob",e).isNotMissing(),D("options.displayServiceUrl",r).isNotMissing();const n=de(o,e,r);return[new O({layer:n})]}export async function dxfToLayerExtensions(e,t,r){const{inputSpatialReference:o,outputSpatialReference:n}=t;D("options.dxfBlob",e).isNotMissing(),D("options.inputSpatialReference",o).isNotMissing(),D("options.outputSpatialReference",n).isNotMissing();const a=new ne(o,n,r),i=a.getContext(),c=await e.text(),l=new w;await ee();try{const e=l.parseSync(c);if(!e)throw new Error("DXF parsing failed: parser returned null");i.dxf=e}catch(e){throw e instanceof Error?e:new Error(String(e))}const m=e instanceof File?e.name:"dxf-layer",u=m.replace(/[^a-zA-Z0-9_.-]/g,"_");if(i.fileName=m,i.sanitizedFileName=u,i.subLayers=await a.processAll(),!i.subLayers||0===i.subLayers.length)return[];const f=new s({id:`dxf-group-${u}-${(new Date).getTime()}`,title:m,visible:!0}),p={layer:f,visibilityMode:"independent"};return f.layers.addMany(i.subLayers),[new T(p)]}export async function fgdbToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedFgdbData:o}=t;D("options.fgdbBlob",e).isNotMissing(),D("options.displayServiceUrl",r).isNotMissing(),D("options.geoProcessedFgdbData",o).isNotMissing();const n=await ge(o,e,r);return[new O({layer:n})]}export async function shapefileToUploadData(e,t){D("shapefileData",e).isNotMissing();const o=Ie(t),n=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:i},{default:s}]=await Promise.all([import("jszip"),import("shpjs")]),c=await n,l=await i.loadAsync(new Uint8Array(c)),m=new x;l.forEach(((e,t)=>{t&&m.set(t.name,t)}));const u=l.filter((()=>!0)).map((e=>e.name));let f,p=u.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(p=function(e){if(!e.length)return[];let t=e[0];const r=t.match(Oe);return r?(t=r[1],e.filter((e=>{const r=e.match(Oe);return r&&r[1]===t}))):[t]}(p),u.some((e=>e.endsWith(".prj")))&&!p.every((e=>m.has(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(u.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await l.file(e).async("string");if(f){if(t!==f)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else f=t})));let y=[],d=[];for(const e of p){if(!m.has(`${e}.shp`)||!m.has(`${e}.shx`)||!m.has(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=s.parseShp(await m.get(`${e}.shp`).async("uint8array")),r=s.parseDbf(await m.get(`${e}.dbf`).async("uint8array"));if(r.length!==t.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");y=y.concat(r),d=d.concat(t)}const g=await Promise.all(d.map((e=>async function(e,t){const o=E(e)?function(e){D("geometry.coordinates",e.type).matches("Point"),D("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,o,n]=e.coordinates,i=new r({x:t,y:o,spatialReference:a.WGS84});if(Array.isArray(n)){const[e,t]=n;!e&&!t||e?i.z=e:i.m=t}return i}(e):await K(e);if(t){let e;try{const r=await Y(t);e=new a({wkid:$(r)})}catch{}e||(e=new a({wkt:t})),o.spatialReference=e}return o}(e,f)))),w=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];y.forEach(((e,t)=>e[w]=JSON.stringify(g[t].toJSON())));return{data:function(e){const t=e.map((e=>Object.keys(e))).reduce(((e,t)=>e.concat(t.filter((t=>!e.includes(t))))),[]);return[t.map((e=>({raw:e}))),...e.map((e=>t.map((t=>({raw:e[t]})))))]}(y),...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[w],inSpatialReference:g[0]?.spatialReference??a.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){D("shapefileData",e).isNotMissing();const r=Ie(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}export function getDefaultSymbol(e,t){const r=e%8;let o=["#FFDBFF","#88D6FF","#7F9FC3","#FF8200","#F34A53","#76E3B9","#E7BFFF","#FFC467"][r],n=["#EF3786","#005A99","#2D5070","#790C00","#4C0000","#006543","#6244A9","#904200"][r];if(Math.floor(e/8)%2!=0){const e=o;o=n,n=e}switch(t){case"point":case"multipoint":return new g({color:o,outline:{color:n}});case"polyline":return new d({color:o,width:"2"});case"polygon":return new y({color:o,outline:{color:n}});case"mesh":return new f({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function Ee(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:S,detectOid:!e?.primaryKeyField}}function Re(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...Ee(e)},...e}}function Ae(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...Ee(e)},...e}}function Ie(e){return{...{...Ee(e)},...e}}function Ge(e,t){return t.geometryFormat===GeometryFormat.XYZ?["x","y","z"]:t.geometryFormat===GeometryFormat.XY?["x","y"]:t.geometryFormat===GeometryFormat.LAT_LON?["latitude","longitude"]:t.geometryFormat===GeometryFormat.NONE?[]:["geometry"]}function _e(e,t,r,o){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return n;if(t&&!t.includes("*"))return t.filter((e=>!n.includes(e)));{const t=r.fields.filter((e=>"oid"!==e.type)).map((e=>e.name)).toArray();let o=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function Ce(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;if(Array.isArray(t)){const e=new Set;for(const r of t)if("fields"===r.type&&Array.isArray(r.fieldInfos))for(const t of r.fieldInfos)t.visible&&e.add(t.fieldName);if(e.size>0)return Array.from(e)}const r=e.featureSettings.popupTemplate?.fieldInfos;if(Array.isArray(r)){const e=[];for(const t of r)t.visible&&e.push(t.fieldName);if(e.length>0)return e}return["*"]}async function Le(e,t){const r=await ve(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!E(r))throw new Error("Cannot use geometry format XYZ with non-point geometry");return[r.x,r.y,r.z]}if(t.geometryFormat===GeometryFormat.XY){if(!r)return["",""];if(!E(r))throw new Error("Cannot use geometry format XY with non-point geometry");return[r.x,r.y]}if(t.geometryFormat===GeometryFormat.LAT_LON){if(!r)return["",""];if(!E(r))throw new Error("Cannot use geometry format LAT_LONG with non-point geometry");return[r.y,r.x]}return t.geometryFormat===GeometryFormat.ARCGIS_JSON?r?[JSON.stringify(r.toJSON())]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[await X(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await Z(r))]:[""]:[]}async function ve(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await J([e],t))[0]:e}function Pe(e,t){const r=[t.delimiter,he,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(he,"g"),`${he}${he}`);return`${he}${t}${he}`}return e}function je(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||j.ROUND_TRIP;return B(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():C({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof b)return k({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=Be(r)),r}function Ue(e,t,r){if(r.useFormattedValues||$e(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const o=e.schema.findFieldByName(t)?.type;if(null!=o)switch(o){case"date":case"date-only":case"timestamp-offset":{const r=_(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=H(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function $e(e,t){return!!te(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function Be(e){for(const t of we)if(e.startsWith(t))return`\t${e}`;return e}function He(e,t,r){const o=e.startsWith(he),n=e.endsWith(he);if(o&&!n||!o&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const a=o?e.substring(1,e.length-1):e;let i=-1;return ke(a,he,((e,o)=>{if(o===a.length)return!0;if(i<0){if(o!==a.length)return i=o,!0}else if(o===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),a.replace(new RegExp(`${he}${he}`,"g"),he)}function ke(e,t,r){let o,n=!1,a=0,i=0;for(;o=e.indexOf(t,a),!(o<0);){for(let t=a;t<o;)e.substring(t).startsWith(he)?(n=!n,t+=1):t++;const s=o+t.length;if(!n){const e=r(i,o);if(i=s,!e)return}a=s}r(i,e.length)}async function ze(e,t){const r=JSON.parse(e),o=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(o.spatialReference=t),o}async function Je(e,t){const r=await K(JSON.parse(e));return r.spatialReference=t,r}async function Xe(e,t){const r=await W(e);return r.spatialReference=t,r}function We(e,t,r){const o=r?[r]:geometryTypeHeaders[t];for(const t of o){const r=t.map((t=>e.map((e=>e?.raw?.toString().trim().toLowerCase())).indexOf(t.trim().toLowerCase())));if(r.every((e=>e>=0)))return r}}async function qe(e,t){return(await Promise.all(e.map((async(e,r)=>{const o=e?.raw;if("string"==typeof o&&""!==o)try{return await t(o,void 0),r}catch{return}})))).find((e=>void 0!==e))}function Ye(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:$({locale:t,format:r},e)}async function Ze(e,t,r){const o=r?e.slice(1):e;if(r){const r=We(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of De){try{await Ke(r[0],n,t,o)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=We(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of De){const n=await qe(o[0],r);if(void 0!==n){try{await Ke(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function Ke(e,t,r,o){return{columnIndices:[e],geometries:await Promise.all(o.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function Ve(e,t,r){let o=!1,n=!0,a=!0,i=!0,s=!0,c=!0;const l=new Set,{data:m,includeHeaderRow:u,dateFormat:f,timeFormat:p,primaryKeyField:y,locale:d}=e,g=u?m[0]:[],w=u?m.slice(1):m;for(const e of w){const r=e[t];r?.raw&&(l.add(r.raw),o=!0,n&&(n=Q(r.raw,d)||Number.isNaN(r.raw)),a&&(a=r.raw instanceof Date||_(f||L,r.raw)!==v),s&&(s=_(f||Ne,r.formatted)!==v),i&&(i=r.raw instanceof b||H(p||z,r.raw).isValid),c&&(c=H({format:p||Te,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return y&&g[t]?.raw===y||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&i?"esriFieldTypeTimeOnly":o&&a?"esriFieldTypeDate":"esriFieldTypeString"}async function Qe(e,t,r){const{escapeFormulaChars:o,locale:n,numberFormat:a,dateFormat:i,timeFormat:s}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?Ye(e,n,a):null;if("esriFieldTypeDate"===t.type){if(e instanceof Date)return e.getTime();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new Date(t.y,t.m-1,t.d,t.H,t.M,t.S).getTime():void 0}return""===e?null:_({locale:n,format:i},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof b)return e.toString();if(e instanceof Date)return new b(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new b(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:H({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of we)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function et(e){switch(e){case P.DATE_SHORT:return"dd/MM/yyyy";case P.DATE_LONG:return"MMMM d, yyyy";case P.TIME_SHORT:return"h:mm AM/PM";case P.TIME_LONG:return"h:mm:ss AM/PM";case P.DATE_TIME_SHORT:case P.DEFAULT:return"MMM d yyyy h:mm AM/PM";case P.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case P.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case P.ISO_8601:case P.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&be().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&be().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function tt(e){switch(e){case P.DATE_SHORT:return"dd/MM/yyyy";case P.DATE_LONG:return"MMMM d, yyyy";case P.DATE_TIME_SHORT:case P.DEFAULT:return"MMM d yyyy";case P.DATE_TIME_LONG:return"MMMM d yyyy";case P.FULL:return"dddd, MMMM d yyyy";case P.ISO_8601:case P.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function rt(e){switch(e){case U.TIME_SHORT:return"h:mm AM/PM";case U.TIME_LONG:return"h:mm:ss AM/PM";case U.ISO_8601:case U.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&be().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function ot(e){switch(e){case j.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case j.CURRENCY:return'"$"#,##0.00';case j.FIXED_POINT:case j.DEFAULT:return"0.0000";case j.NUMBER:return"#,##0.0000";case j.PERCENT:return"0%";case j.ROUND_TRIP:return"0.00000";default:return e}}function nt(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e)return e;if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime():e;if(e instanceof b)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=Be(r)),r}function at(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function it(e,t){return e.map((e=>at(e,t)))}function st(e,t){return e.map((e=>it(e,t)))}function ct(e,t,r){switch(t){case xe.NUMBER:return e instanceof Date?e.getTime():$(e);case xe.STRING:return e instanceof Date?C({format:r.dateFormat??P.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof b?k({format:r.timeFormat??U.ROUND_TRIP},e):"number"==typeof e?B(r.numberFormat??j.DEFAULT,e):e.toString();case xe.BOOLEAN:return!!e;case xe.DATE:return _(e);default:return e.toString()}}function lt(e,t){return JSON.stringify(e.toJSON())===JSON.stringify(t.toJSON())}function mt(e){return 1===e.length?new l({symbol:e[0]}):new m({field:"SymbolID",uniqueValueInfos:[...e.map(((e,t)=>new u({label:t.toString(),symbol:e,value:t})))]})}
|
|
1
|
+
import e from"@arcgis/core/Color.js";import t from"@arcgis/core/Graphic.js";import r from"@arcgis/core/geometry/Point";import o from"@arcgis/core/geometry/Polygon.js";import n from"@arcgis/core/geometry/Polyline.js";import a from"@arcgis/core/geometry/SpatialReference";import i from"@arcgis/core/layers/FeatureLayer.js";import s from"@arcgis/core/layers/GroupLayer.js";import c from"@arcgis/core/layers/support/Field.js";import l from"@arcgis/core/renderers/SimpleRenderer.js";import m from"@arcgis/core/renderers/UniqueValueRenderer.js";import u from"@arcgis/core/renderers/support/UniqueValueInfo.js";import f from"@arcgis/core/symbols/MeshSymbol3D.js";import p from"@arcgis/core/symbols/PictureMarkerSymbol.js";import y from"@arcgis/core/symbols/SimpleFillSymbol.js";import d from"@arcgis/core/symbols/SimpleLineSymbol.js";import g from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import w from"dxf-parser";import{geometryTypeToJson as h}from"../json/GeometryJson.js";import{translate as F}from"../locale/language.js";import{INVARIANT as S}from"../locale.js";import{FeatureCollectionLayerExtension as N}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as T}from"../mapping/GroupLayerExtension.js";import{MapImageLayerExtension as O}from"../mapping/MapImageLayerExtension.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{Time as b}from"../utilities/Time.js";import{checkArg as D,assertNever as M}from"../utilities/checkArg.js";import{isPoint as E,isMultipoint as R,isPolyline as A,isPolygon as I,isExtent as G}from"../utilities/esri.js";import{parse as _,format as L,DEFAULT_PARSING_FORMATS as C,INVALID_DATE as v}from"../utilities/format/date.js";import{DateFormat as P,NumberFormat as j,TimeFormat as U}from"../utilities/format/formats.js";import{parse as $,format as B}from"../utilities/format/number.js";import{parse as H,format as k,DEFAULT_PARSING_FORMATS as z}from"../utilities/format/time.js";import{project as J,esriToWKT as X,wktToEsri as W,esriWkidToWkt as q,esriWktToWkid as Y,esriToGeoJSON as Z,geoJSONToEsri as K}from"../utilities/geometry.js";import{getLogger as V}from"../utilities/log.js";import{isNumeric as Q}from"../utilities/number.js";import{delay as ee}from"../utilities/promise.js";import{caseInsensitiveEquals as te}from"../utilities/string.js";import{Feature as re}from"./Feature.js";import{FeatureSet as oe}from"./FeatureSet.js";import{DxfEntityProcessor as ne}from"./support/_dxfConverters.js";import{}from"./support/_fgdbConverter.js";import{createGpxDocument as ae,serializeGpxDocument as ie,buildGpxTrack as se,buildGpxTrackPoint as ce,buildGpxWaypoint as le,getGpxExtensions as me,getGpxTrackDescription as ue,getGpxTrackName as fe,getGpxTrackTime as pe,getGpxTrackId as ye}from"./support/_gpxExport.js";const de=["=","-","+","@"],ge='"',we="\r\n",he="\n",Fe=[...C.map(Ve),"M/d/yy"],Se=[...z.map(et).map((e=>e.replace("AM/PM","tt")))],Ne=/(\w+)_(point|multipoint|polyline|polygon)z?/;var Te;function Oe(){return V("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(Te||(Te={}));export const FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g;export var GeometryFormat;!function(e){e.NONE="NONE",e.WKT="WKT",e.XY="XY",e.XYZ="XYZ",e.LAT_LON="LAT_LONG",e.GEO_JSON="GEO_JSON",e.ARCGIS_JSON="ARCGIS_JSON"}(GeometryFormat||(GeometryFormat={}));export const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["latitude","longitude"],["lat","lon"],["lat","long"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};const xe=[[GeometryFormat.ARCGIS_JSON,He],[GeometryFormat.GEO_JSON,ke],[GeometryFormat.WKT,ze]],be=new Map(xe);export async function uploadDataToFeatureSet(e){const t=await async function(e){const{data:t,includeHeaderRow:o,geometryFormat:n,geometryFields:a,locale:i,numberFormat:s,inSpatialReference:c}=e,l=o?t.slice(1):t;if(n===GeometryFormat.NONE)return{columnIndices:[]};const m=e=>We(e,i,s),u=(e,t)=>{const o=t===GeometryFormat.XYZ,n=t===GeometryFormat.LAT_LON;return{columnIndices:e,geometries:l.map((t=>{if(t.length>=Math.max(...e)&&Q(t[e[0]]?.raw,i)&&Q(t[e[1]]?.raw,i)&&(!o||Q(t[e[2]]?.raw,i)))return new r({x:m(n?t[e[1]].raw:t[e[0]].raw),y:m(n?t[e[0]].raw:t[e[1]].raw),z:o?m(t[e[2]].raw):0,spatialReference:c})}))}},f=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),c)})))}),p=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return u(e,t);case GeometryFormat.ARCGIS_JSON:return f(e[0],He);case GeometryFormat.GEO_JSON:return f(e[0],ke);case GeometryFormat.WKT:return f(e[0],ze);default:return M(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=Je(o?t[0]:t[0].map(((e,t)=>({raw:t.toString()}))),n,o?a:a.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(o&&void 0===e)throw new Error(`Error parsing file data: Expected geometry columns ${geometryTypeHeaders[n][0].join(",")} are missing for GeometryType.${n}`);return p(e??[0],n)}const[y,d]=await qe(t,c,o);if(y===GeometryFormat.NONE)return{columnIndices:[]};return d.length>1?u(d,y):f(d[0],be.get(y))}(e),o=function(e,t){const{data:r,displayField:o,includeHeaderRow:n,inSpatialReference:a,outSpatialReference:i,generatePrimaryKey:s}=e,c={fields:[]},l=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:m}=e,u=0;for(let t=0;t<r[0].length;t++){if(l(t))continue;const o=Ze(e,t,!s&&!m&&!c.fields.find((e=>"esriFieldTypeOID"===e.type)));let a=r[0][t]?.raw?.toString(),i=a?.replace(FIELD_NAME_REGEX,"_");n&&i||(i="field"+ ++u,a=F("gcx.api.data.convert.import-field-alias",u)),c.fields.push({alias:a,name:i,type:o}),"esriFieldTypeOID"===o&&(m=i)}if(c.spatialReference=i??t.geometries?.[0]?.spatialReference??a,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];c.geometryType=e.every((e=>e===r))?h(r):void 0}if(!c.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=c.fields.length+1,t=!!c.fields.find((e=>"objectid"===e.name.toLowerCase()));m=t?`OBJECTID_${e}`:"OBJECTID",c.fields.push({name:m,alias:m,type:"esriFieldTypeOID"})}return c.displayField=o??c.fields.find((e=>!te(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!te(e.name,m)))?.name??m,c.primaryKeyField=m,c}(e,t),n=await async function(e,t,r){const{data:o,includeHeaderRow:n,outFields:a,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:l,timeFormat:m}=e,{spatialReference:u}=r,f=[],p=n?o.slice(1):o,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(p.map((async(e,o)=>{const n=new re;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(a.includes("*")||a.filter((e=>te(e,u.name))).length>0){let e=await Ke(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:l,numberFormat:c,timeFormat:m,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=o),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await Le(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new oe({features:n,schema:o})}export async function toCsv(e,t){D("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:P.ROUND_TRIP,timeFormat:U.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:a.WGS84,includeHeaderRow:!0,outFields:Ge(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?we:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:i,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=Ae(r,o),f=Ie(r,c,e.schema,!0),p=Ie(r,c,e.schema,!1);if(i){const e=[];for(const t of u)e.push(Ce(t,o));for(const t of f)e.push(Ce(t,o));for(const t of p)e.push(Ce(t,o));const t=e.join(s)+l;m.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>{const o=Pe(e,t,r),n=e.schema.findFieldByName(t)?.type;return Ce(ve(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await _e(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":ve(e,t))));return r.map((e=>""===e?"":Ce(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...p.map((e=>r(e,o))));const n=`${t.join(s)}${l}`;m.push(n)})));return new Blob(m,{type:"text/plain",endings:"\n"===l||l===we?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(D("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsText(e)}));r=await t}else r=e;const o=Me(t),n=o.rowDelimiter||function(e){let t=he;return Be(e,we,((r,o)=>(0===r&&o===e.length||(t=we),!1))),t}(r),a=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(Be(e,t,((t,r)=>(r!==e.length||t!==r)&&(n.push(e.substring(t,r)),n.length<3))),0===n.length)return o;let a=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>n[0].includes(e.delimiter)));if(0===a.length)return o;for(const e of n)for(const t of a){let o=0,n=0;Be(e,t.delimiter,((a,i)=>{if(i!==e.length&&o++,","===t.delimiter){const t=e.charAt(i-1),o=e.charAt(i+1);Q(t,r)&&Q(o,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(o),","===t.delimiter&&t.rowsNumberAdjacentOccurrences.push(n)}if(a=a.filter((e=>e.rowsDelimiterOccurrences.every((t=>e.rowsDelimiterOccurrences[0]===t)))).sort(((e,t)=>t.rowsDelimiterOccurrences[0]-e.rowsDelimiterOccurrences[0])),a.length>1&&","===a[0].delimiter&&null!=r&&r!==S){const e=a[0];if(null!=e&&","===e.delimiter&&","===Intl.NumberFormat(r).formatToParts(1.1).find((e=>"decimal"===e.type))?.value)for(let t=0;t<e.rowsDelimiterOccurrences.length;t++)if(e.rowsDelimiterOccurrences[t]<=e.rowsNumberAdjacentOccurrences[t]){a=a.filter((e=>","!==e.delimiter));break}}if(0===a.length)return o;return a[0].delimiter}(r,n,t.locale),i=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return Be(e,r,((r,n)=>{const a=e.substring(r,n);return o.push({raw:$e(a,t,o.length)}),!0})),o};if(Be(e,t,((t,r)=>{const a=e.substring(t,r);return a.length>0&&o.push(n(a,o.length)),!0})),o.length){const e=o[0].length;o.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return o}(r,n,a);let{geometryFormat:s,geometryFields:c}=t;if(!s){const[e,t]=await qe(i,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?i[0][e]?.raw??F("gcx.api.data.convert.import-field-alias",(e+1).toString()):F("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:i,...o,geometryFormat:s,geometryFields:c}}export async function csvToFeatureSet(e,t){const r=Me(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toGpx(e){D("featureSet",e).isNotMissing();const t=Array.from(e),r=ae(),o=r.documentElement,n=new Set;for(const e of t){if(!e.geometry)continue;const t=await Le(e.geometry,a.WGS84),i={name:fe(e),desc:ue(e),time:pe(e),extensions:me(r,e),id:ye(e)};if(E(t))o.appendChild(le(r,t.y,t.x,t.hasZ?t.z:void 0,i));else if(A(t))for(const e of t.paths){if(e.length<2)continue;const n=e.map((([e,o,n])=>ce(r,o,e,t.hasZ?n:void 0)));o.appendChild(se(r,n,i))}else n.add(t.type)}if(n.size>0){const e=Array.from(n).join(", ");Oe().warn(`One or more features with unsupported geometry types (${e}) were ignored during GPX conversion. GPX format only supports points and polylines.`)}const i=ie(r);return new Blob([i],{type:"application/gpx+xml"})}export async function toXLSX(e,t){D("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:Ge(e.source),outSpatialReference:a.WGS84,dateFormat:P.DEFAULT,timeFormat:U.DEFAULT,numberFormat:j.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=Ae(r,o),u=Ie(r,n,e.schema,!0),f=Ie(r,n,e.schema,!1),p=await import("xlsx"),y=p.utils.sheet_new();let d=!1;if(i){const t=m.concat(u).concat(function(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>te(t.name,e)))?.alias??e))}(f,e.source));d=!0,p.utils.sheet_add_aoa(y,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await _e(e.geometry,o));for(const r of u){const n=rt(e.attributes.get(r),o);t.push(n)}for(const a of f){const i=Pe(e,a,o);if(i instanceof b){const o=e.schema.findFieldByName(a);"time-only"===o?.type&&r.add(t.length)}else if(i instanceof Date){const r=e.schema.findFieldByName(a);"date-only"===r?.type&&n.add(t.length)}const s=rt(i,o);t.push(s)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void Oe().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(y,[t],{cellDates:!0,origin:d?-1:void 0}),d=!0;const a=p.utils.decode_range(y["!ref"]);for(let e=a.s.c;e<=a.e.c;e++){const t=y[p.utils.encode_cell({r:a.e.r,c:e})];"d"===t.t?r.has(e)?t.z=et(c??U.ROUND_TRIP):n.has(e)?t.z=Qe(s??P.ROUND_TRIP):t.z=Ve(s??P.ROUND_TRIP):"n"===t.t&&(t.z=tt(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=y;const w=p.write(g,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),h=new Uint8Array(w.length);for(let e=0;e<w.length;e++)h[e]=w.charCodeAt(e);return new Blob([h.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){D("xlsxData",e).isNotMissing();const r=Ee(t),o=await async function(e,t){const r=await import("xlsx"),o=new Promise(((o,n)=>{const a=new FileReader;a.onload=()=>{const e=new Uint8Array(a.result);let n="";for(const t of e)n+=String.fromCharCode(t);const i=r.read(n,{type:"binary",cellDates:!0}),s=t.sheetName||i.SheetNames[0],c=i.Sheets[s];o(c)},a.onerror=()=>{n(a.error)},a.readAsArrayBuffer(e)})),n=await o,a=r.utils.decode_range(n["!ref"]),i=[];for(let e=a.s.r;e<=a.e.r;e++){const t=[];for(let o=a.s.c;o<=a.e.c;o++){const a=n[`${r.utils.encode_cell({r:e,c:o})}`];a&&"d"===a.t&&a.v instanceof Date&&(a.v=new Date(a.v.getTime()+6e4*a.v.getTimezoneOffset())),t.push(a?{raw:a.v,formatted:"s"===a.t?void 0:a.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:n,geometryFields:a}=t;if(!n){const[e,t]=await qe(o,r.inSpatialReference,r.includeHeaderRow);n=e,a=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??F("gcx.api.data.convert.import-field-alias",(e+1).toString()):F("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:a}}export async function xlsxToFeatureSet(e,t){D("xlsxData",e).isNotMissing();const r=Ee(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}export function kmlHexToEsriColor(t){return e.fromHex(`#${t.match(/.{2}/g).reverse().join("")}`)}export function parseKMLCoordinates(e){return e.trim().split(/\s+/).map((e=>{const[t,r,o]=e.split(",").map(Number);return{x:t,y:r,z:o}}))}export function parseKMLSymbol(t,r,o){if(t){const r=t.querySelector("IconStyle > Icon > href")?.textContent;if(r)return new p({url:r,width:32,height:32});const o=t.querySelector("PolyStyle");if(o){const t=o.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]);return new y({color:r,outline:{color:[0,0,0,.5],width:1}})}const n=t.querySelector("LineStyle");if(n){const t=n.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]),o=parseFloat(n.querySelector("width")?.textContent||"1");return new d({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){D("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),n=Array.from(e),i={...{useFormattedValues:!1,outFields:Ge(e.source),fileName:e.title||"export"},...t},{outFields:s,outSpatialReference:c,fileName:l}=i,m=e=>e.geometry.hasZ||e.geometry.hasM,u=new Map,f=n.filter((e=>E(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const p=n.filter((e=>R(e.geometry)));u.set("MULTIPOINTZ",p.filter(m)),u.set("MULTIPOINT",p.filter((e=>!m(e))));const y=n.filter((e=>A(e.geometry)));u.set("POLYLINEZ",y.filter(m)),u.set("POLYLINE",y.filter((e=>!m(e))));const d=n.filter((e=>I(e.geometry)||G(e.geometry)));u.set("POLYGONZ",d.filter(m)),u.set("POLYGON",d.filter((e=>!m(e))));const g=Ie(n,s,e.schema,!0);let w=Ie(n,s,e.schema,!1);w=g.concat(w);const h=new r,F=Array.from(u.keys()).filter((e=>u.get(e).length>0));await Promise.all(F.map((async t=>{const r=u.get(t),n=await Promise.all(r.map((e=>Le(e.geometry,c)))),s=await async function(e){const{wkid:t,wkt:r}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===t&&e.spatialReference.wkt===r)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return r??await q(t??a.WGS84.wkid)}(n),m=i.useFormattedValues?Object.assign({},...w.map((e=>({[e]:Te.STRING})))):function(e,t,r,o){const n={};for(const a of t){if(e.some((e=>je(e,a)))){n[a]=Te.STRING;continue}const t=r?r.fields.find((e=>te(e.name,a))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[a]=Te.NUMBER;break;case"date":case"timestamp-offset":n[a]=o?Te.NUMBER:Te.DATE;break;default:n[a]=Te.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,a)instanceof Date||void 0===i(e,a)))&&e.some((e=>i(e,a)instanceof Date))?n[a]=o?Te.NUMBER:Te.DATE:e.every((e=>"number"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"number"==typeof i(e,a)))?n[a]=Te.NUMBER:e.every((e=>"boolean"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"boolean"==typeof i(e,a)))?n[a]=Te.BOOLEAN:n[a]=Te.STRING}return n}(r,w,e.schema,"timestamp"===i.dateFormat),f=function(e){return e.map((e=>{if(E(e)){const{x:t,y:r,z:o,m:n}=e,a=[t,r];return e.hasZ&&a.push(o),e.hasM&&a.push(n),ot(a,e)}if(R(e))return nt(e.points,e);if(A(e))return at(e.paths,e);if(I(e))return at(e.rings,e);if(G(e)){const t=[e.xmin,e.ymax];return[[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]]}throw new Error("Unsupported geometry type.")}))}(n),p=function(e,t,r,o){const n=[];for(const a of e){const e={};for(const n of t){let t=Pe(a,n,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=it(t,r[n],{...o,isDateOnly:"date-only"===a.schema.findFieldByName(n)?.type})}e[n.replaceAll(".","_")]=t}n.push(e)}return n}(r,w,m,i);o.write(p,t,f,((e,r)=>{const o=F.length>1?`${l}_${t.toLowerCase()}`:l;h.file(`${o}.shp`,r.shp.buffer,{binary:!0}),h.file(`${o}.shx`,r.shx.buffer,{binary:!0}),h.file(`${o}.dbf`,r.dbf.buffer,{binary:!0}),h.file(`${o}.prj`,s)}))})));const S=await h.generateAsync({type:"uint8array"});return new Blob([S.buffer],{type:"text/plain"})}export async function kmlToLayerExtensions(e){D("blob",e).isNotMissing();const a=await e.text(),l=(new DOMParser).parseFromString(a,"application/xml"),m=function(e,a,u=!1){const f={};l.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const p=e.querySelector(":scope > name")?.textContent??"Unnamed Container",y=new Map;e.querySelectorAll(":scope > Placemark").forEach(((e,i)=>{const s=e.querySelector("name")?.textContent??"",c=e.querySelector("description")?.textContent??"",l=function(e){const t=e.querySelector("Point > coordinates"),a=e.querySelector("LineString > coordinates"),i=e.querySelector("Polygon");if(t?.textContent){const[e]=parseKMLCoordinates(t.textContent.replace(/ /g,""));return new r(e)}if(a?.textContent)return new n({paths:[parseKMLCoordinates(a.textContent).map((({x:e,y:t})=>[e,t]))]});if(i?.textContent){const e=i.querySelector("outerBoundaryIs > LinearRing > coordinates");if(e?.textContent){const t=[parseKMLCoordinates(e.textContent).map((({x:e,y:t})=>[e,t]))];return new o({rings:t})}}return}(e);if(l?.type){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:e.querySelector("Style"),l.type,a);y.has(l.type)||y.set(l.type,{graphics:[],symbols:[]});let n=function(e,t){for(let r=0;r<e.length;r++)if(st(e[r],t))return r;return-1}(y.get(l.type).symbols,o);-1===n&&(y.get(l.type).symbols.push(o),n=y.get(l.type).symbols.length-1),y.get(l.type).graphics.push(new t({geometry:l,attributes:{name:s,description:c,SymbolID:n,OBJECTID:p+i}}))}}));const d=e.querySelectorAll(":scope > Folder, :scope > Document");if(u||1!==y.size||0!==d.length){const e=new T({layer:new s({title:p})});return y.forEach(((t,r)=>{const o=new i({displayField:"name",title:`${r.slice(0,1).toUpperCase()+r.slice(1)}s`,source:t.graphics,renderer:ct(t.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]}),n=new N({layer:o});e.layerExtensions.add(n)})),d.forEach(((t,r)=>{const o=m(t,r);e.layerExtensions.add(o)})),e}{const e=[...y.values()][0],t=new i({displayField:"name",title:p,source:e.graphics,renderer:ct(e.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]});return new N({layer:t})}},u=[];return l.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=m(e,t,!0);r.layerExtensions.length&&u.push(r)})),u}export async function lpkxToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedLpkxData:o}=t;D("options.lpkxBlob",e).isNotMissing(),D("options.displayServiceUrl",r).isNotMissing();const{createLpkxLayer:n}=await import("./support/_lpkxConverter.js"),a=n(o,e,r);return[new O({layer:a})]}export async function dxfToLayerExtensions(e,t,r){const{inputSpatialReference:o,outputSpatialReference:n}=t;D("options.dxfBlob",e).isNotMissing(),D("options.inputSpatialReference",o).isNotMissing(),D("options.outputSpatialReference",n).isNotMissing();const a=new ne(o,n,r),i=a.getContext(),c=await e.text(),l=new w;await ee();try{const e=l.parseSync(c);if(!e)throw new Error("DXF parsing failed: parser returned null");i.dxf=e}catch(e){throw e instanceof Error?e:new Error(String(e))}const m=e instanceof File?e.name:"dxf-layer",u=m.replace(/[^a-zA-Z0-9_.-]/g,"_");if(i.fileName=m,i.sanitizedFileName=u,i.subLayers=await a.processAll(),!i.subLayers||0===i.subLayers.length)return[];const f=new s({id:`dxf-group-${u}-${(new Date).getTime()}`,title:m,visible:!0}),p={layer:f,visibilityMode:"independent"};return f.layers.addMany(i.subLayers),[new T(p)]}export async function fgdbToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedFgdbData:o}=t;D("options.fgdbBlob",e).isNotMissing(),D("options.displayServiceUrl",r).isNotMissing(),D("options.geoProcessedFgdbData",o).isNotMissing();const{createFgdbLayer:n}=await import("./support/_fgdbConverter.js"),a=await n(o,e,r);return[new O({layer:a})]}export async function shapefileToUploadData(e,t){D("shapefileData",e).isNotMissing();const o=Re(t),n=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:i},{default:s}]=await Promise.all([import("jszip"),import("shpjs")]),c=await n,l=await i.loadAsync(new Uint8Array(c)),m=new x;l.forEach(((e,t)=>{t&&m.set(t.name,t)}));const u=l.filter((()=>!0)).map((e=>e.name));let f,p=u.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(p=function(e){if(!e.length)return[];let t=e[0];const r=t.match(Ne);return r?(t=r[1],e.filter((e=>{const r=e.match(Ne);return r&&r[1]===t}))):[t]}(p),u.some((e=>e.endsWith(".prj")))&&!p.every((e=>m.has(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(u.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await l.file(e).async("string");if(f){if(t!==f)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else f=t})));let y=[],d=[];for(const e of p){if(!m.has(`${e}.shp`)||!m.has(`${e}.shx`)||!m.has(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=s.parseShp(await m.get(`${e}.shp`).async("uint8array")),r=s.parseDbf(await m.get(`${e}.dbf`).async("uint8array"));if(r.length!==t.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");y=y.concat(r),d=d.concat(t)}const g=await Promise.all(d.map((e=>async function(e,t){const o=E(e)?function(e){D("geometry.coordinates",e.type).matches("Point"),D("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,o,n]=e.coordinates,i=new r({x:t,y:o,spatialReference:a.WGS84});if(Array.isArray(n)){const[e,t]=n;!e&&!t||e?i.z=e:i.m=t}return i}(e):await K(e);if(t){let e;try{const r=await Y(t);e=new a({wkid:$(r)})}catch{}e||(e=new a({wkt:t})),o.spatialReference=e}return o}(e,f)))),w=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];y.forEach(((e,t)=>e[w]=JSON.stringify(g[t].toJSON())));return{data:function(e){const t=e.map((e=>Object.keys(e))).reduce(((e,t)=>e.concat(t.filter((t=>!e.includes(t))))),[]);return[t.map((e=>({raw:e}))),...e.map((e=>t.map((t=>({raw:e[t]})))))]}(y),...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[w],inSpatialReference:g[0]?.spatialReference??a.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){D("shapefileData",e).isNotMissing();const r=Re(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}export function getDefaultSymbol(e,t){const r=e%8;let o=["#FFDBFF","#88D6FF","#7F9FC3","#FF8200","#F34A53","#76E3B9","#E7BFFF","#FFC467"][r],n=["#EF3786","#005A99","#2D5070","#790C00","#4C0000","#006543","#6244A9","#904200"][r];if(Math.floor(e/8)%2!=0){const e=o;o=n,n=e}switch(t){case"point":case"multipoint":return new g({color:o,outline:{color:n}});case"polyline":return new d({color:o,width:"2"});case"polygon":return new y({color:o,outline:{color:n}});case"mesh":return new f({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function De(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:S,detectOid:!e?.primaryKeyField}}function Me(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...De(e)},...e}}function Ee(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...De(e)},...e}}function Re(e){return{...{...De(e)},...e}}function Ae(e,t){return t.geometryFormat===GeometryFormat.XYZ?["x","y","z"]:t.geometryFormat===GeometryFormat.XY?["x","y"]:t.geometryFormat===GeometryFormat.LAT_LON?["latitude","longitude"]:t.geometryFormat===GeometryFormat.NONE?[]:["geometry"]}function Ie(e,t,r,o){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return n;if(t&&!t.includes("*"))return t.filter((e=>!n.includes(e)));{const t=r.fields.filter((e=>"oid"!==e.type)).map((e=>e.name)).toArray();let o=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function Ge(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;if(Array.isArray(t)){const e=new Set;for(const r of t)if("fields"===r.type&&Array.isArray(r.fieldInfos))for(const t of r.fieldInfos)t.visible&&e.add(t.fieldName);if(e.size>0)return Array.from(e)}const r=e.featureSettings.popupTemplate?.fieldInfos;if(Array.isArray(r)){const e=[];for(const t of r)t.visible&&e.push(t.fieldName);if(e.length>0)return e}return["*"]}async function _e(e,t){const r=await Le(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!E(r))throw new Error("Cannot use geometry format XYZ with non-point geometry");return[r.x,r.y,r.z]}if(t.geometryFormat===GeometryFormat.XY){if(!r)return["",""];if(!E(r))throw new Error("Cannot use geometry format XY with non-point geometry");return[r.x,r.y]}if(t.geometryFormat===GeometryFormat.LAT_LON){if(!r)return["",""];if(!E(r))throw new Error("Cannot use geometry format LAT_LONG with non-point geometry");return[r.y,r.x]}return t.geometryFormat===GeometryFormat.ARCGIS_JSON?r?[JSON.stringify(r.toJSON())]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[await X(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await Z(r))]:[""]:[]}async function Le(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await J([e],t))[0]:e}function Ce(e,t){const r=[t.delimiter,ge,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(ge,"g"),`${ge}${ge}`);return`${ge}${t}${ge}`}return e}function ve(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||j.ROUND_TRIP;return B(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():L({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof b)return k({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=Ue(r)),r}function Pe(e,t,r){if(r.useFormattedValues||je(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const o=e.schema.findFieldByName(t)?.type;if(null!=o)switch(o){case"date":case"date-only":case"timestamp-offset":{const r=_(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=H(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function je(e,t){return!!te(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function Ue(e){for(const t of de)if(e.startsWith(t))return`\t${e}`;return e}function $e(e,t,r){const o=e.startsWith(ge),n=e.endsWith(ge);if(o&&!n||!o&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const a=o?e.substring(1,e.length-1):e;let i=-1;return Be(a,ge,((e,o)=>{if(o===a.length)return!0;if(i<0){if(o!==a.length)return i=o,!0}else if(o===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),a.replace(new RegExp(`${ge}${ge}`,"g"),ge)}function Be(e,t,r){let o,n=!1,a=0,i=0;for(;o=e.indexOf(t,a),!(o<0);){for(let t=a;t<o;)e.substring(t).startsWith(ge)?(n=!n,t+=1):t++;const s=o+t.length;if(!n){const e=r(i,o);if(i=s,!e)return}a=s}r(i,e.length)}async function He(e,t){const r=JSON.parse(e),o=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(o.spatialReference=t),o}async function ke(e,t){const r=await K(JSON.parse(e));return r.spatialReference=t,r}async function ze(e,t){const r=await W(e);return r.spatialReference=t,r}function Je(e,t,r){const o=r?[r]:geometryTypeHeaders[t];for(const t of o){const r=t.map((t=>e.map((e=>e?.raw?.toString().trim().toLowerCase())).indexOf(t.trim().toLowerCase())));if(r.every((e=>e>=0)))return r}}async function Xe(e,t){return(await Promise.all(e.map((async(e,r)=>{const o=e?.raw;if("string"==typeof o&&""!==o)try{return await t(o,void 0),r}catch{return}})))).find((e=>void 0!==e))}function We(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:$({locale:t,format:r},e)}async function qe(e,t,r){const o=r?e.slice(1):e;if(r){const r=Je(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of xe){try{await Ye(r[0],n,t,o)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=Je(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of xe){const n=await Xe(o[0],r);if(void 0!==n){try{await Ye(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function Ye(e,t,r,o){return{columnIndices:[e],geometries:await Promise.all(o.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function Ze(e,t,r){let o=!1,n=!0,a=!0,i=!0,s=!0,c=!0;const l=new Set,{data:m,includeHeaderRow:u,dateFormat:f,timeFormat:p,primaryKeyField:y,locale:d}=e,g=u?m[0]:[],w=u?m.slice(1):m;for(const e of w){const r=e[t];r?.raw&&(l.add(r.raw),o=!0,n&&(n=Q(r.raw,d)||Number.isNaN(r.raw)),a&&(a=r.raw instanceof Date||_(f||C,r.raw)!==v),s&&(s=_(f||Fe,r.formatted)!==v),i&&(i=r.raw instanceof b||H(p||z,r.raw).isValid),c&&(c=H({format:p||Se,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return y&&g[t]?.raw===y||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&i?"esriFieldTypeTimeOnly":o&&a?"esriFieldTypeDate":"esriFieldTypeString"}async function Ke(e,t,r){const{escapeFormulaChars:o,locale:n,numberFormat:a,dateFormat:i,timeFormat:s}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?We(e,n,a):null;if("esriFieldTypeDate"===t.type){if(e instanceof Date)return e.getTime();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new Date(t.y,t.m-1,t.d,t.H,t.M,t.S).getTime():void 0}return""===e?null:_({locale:n,format:i},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof b)return e.toString();if(e instanceof Date)return new b(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new b(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:H({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of de)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function Ve(e){switch(e){case P.DATE_SHORT:return"dd/MM/yyyy";case P.DATE_LONG:return"MMMM d, yyyy";case P.TIME_SHORT:return"h:mm AM/PM";case P.TIME_LONG:return"h:mm:ss AM/PM";case P.DATE_TIME_SHORT:case P.DEFAULT:return"MMM d yyyy h:mm AM/PM";case P.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case P.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case P.ISO_8601:case P.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&Oe().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&Oe().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Qe(e){switch(e){case P.DATE_SHORT:return"dd/MM/yyyy";case P.DATE_LONG:return"MMMM d, yyyy";case P.DATE_TIME_SHORT:case P.DEFAULT:return"MMM d yyyy";case P.DATE_TIME_LONG:return"MMMM d yyyy";case P.FULL:return"dddd, MMMM d yyyy";case P.ISO_8601:case P.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function et(e){switch(e){case U.TIME_SHORT:return"h:mm AM/PM";case U.TIME_LONG:return"h:mm:ss AM/PM";case U.ISO_8601:case U.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&Oe().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function tt(e){switch(e){case j.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case j.CURRENCY:return'"$"#,##0.00';case j.FIXED_POINT:case j.DEFAULT:return"0.0000";case j.NUMBER:return"#,##0.0000";case j.PERCENT:return"0%";case j.ROUND_TRIP:return"0.00000";default:return e}}function rt(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e)return e;if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime():e;if(e instanceof b)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=Ue(r)),r}function ot(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function nt(e,t){return e.map((e=>ot(e,t)))}function at(e,t){return e.map((e=>nt(e,t)))}function it(e,t,r){switch(t){case Te.NUMBER:return e instanceof Date?e.getTime():$(e);case Te.STRING:return e instanceof Date?L({format:r.dateFormat??P.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof b?k({format:r.timeFormat??U.ROUND_TRIP},e):"number"==typeof e?B(r.numberFormat??j.DEFAULT,e):e.toString();case Te.BOOLEAN:return!!e;case Te.DATE:return _(e);default:return e.toString()}}function st(e,t){return JSON.stringify(e.toJSON())===JSON.stringify(t.toJSON())}function ct(e){return 1===e.length?new l({symbol:e[0]}):new m({field:"SymbolID",uniqueValueInfos:[...e.map(((e,t)=>new u({label:t.toString(),symbol:e,value:t})))]})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@arcgis/core/Color.js";import r from"@arcgis/core/geometry/Extent.js";import o from"@arcgis/core/geometry/SpatialReference.js";import t from"@arcgis/core/layers/MapImageLayer";import n from"@arcgis/core/renderers/SimpleRenderer.js";import l from"@arcgis/core/renderers/UniqueValueRenderer";import i from"@arcgis/core/symbols/Font.js";import a from"@arcgis/core/symbols/TextSymbol.js";import{getDefaultSymbol as s}from"../convert.js";let y=0,m="";export function createLpkxLayer(e,i,a){const s=a,y=e.lyrxJson.layerDefinitions,f=e.createdFeatureClasses.split(";"),p=y.flatMap(((r,o)=>{if("CIMGroupLayer"===r.type)return[];const t=function(e){if(!e)return;if("CIMSimpleRenderer"===e.type){const r=c(e.symbol?.symbol);if(!r)return;return new n({symbol:r})}if("CIMUniqueValueRenderer"===e.type){const r=e.fields?.[0];if(!r)return;const o=[];return e.groups?.forEach((e=>{e.classes?.forEach((e=>{const r=c(e.symbol?.symbol);r&&e.values?.forEach((e=>{o.push({value:e.fieldValues?.[0],symbol:r})}))}))})),new l({field:r,uniqueValueInfos:o})}return}(r.renderer),i=r.featureTable?.dataConnection?.dataset,a=f.find((e=>e.endsWith(`_${i}`)));return[{id:o,title:r.name,source:{type:"data-layer",dataSource:{type:"table",workspaceId:e.workspaceId,dataSourceName:a,gdbVersion:""}
|
|
1
|
+
import e from"@arcgis/core/Color.js";import r from"@arcgis/core/geometry/Extent.js";import o from"@arcgis/core/geometry/SpatialReference.js";import t from"@arcgis/core/layers/MapImageLayer";import n from"@arcgis/core/renderers/SimpleRenderer.js";import l from"@arcgis/core/renderers/UniqueValueRenderer";import i from"@arcgis/core/symbols/Font.js";import a from"@arcgis/core/symbols/TextSymbol.js";import{getDefaultSymbol as s}from"../convert.js";let y=0,m="";export function createLpkxLayer(e,i,a){const s=a,y=e.lyrxJson.layerDefinitions,f=e.createdFeatureClasses.split(";"),p=y.flatMap(((r,o)=>{if("CIMGroupLayer"===r.type)return[];const t=function(e){if(!e)return;if("CIMSimpleRenderer"===e.type){const r=c(e.symbol?.symbol);if(!r)return;return new n({symbol:r})}if("CIMUniqueValueRenderer"===e.type){const r=e.fields?.[0];if(!r)return;const o=[];return e.groups?.forEach((e=>{e.classes?.forEach((e=>{const r=c(e.symbol?.symbol);r&&e.values?.forEach((e=>{o.push({value:e.fieldValues?.[0],symbol:r})}))}))})),new l({field:r,uniqueValueInfos:o})}return}(r.renderer),i=r.featureTable?.dataConnection?.dataset,a=f.find((e=>e.endsWith(`_${i}`)));return[{id:o,title:r.name,source:{type:"data-layer",dataSource:{type:"table",workspaceId:e.workspaceId,dataSourceName:a,gdbVersion:""}},renderer:t,labelingInfo:u(r,m),showLabels:!0,geometryType:m}]}));p.sort(((e,r)=>{const o=e=>"point"===e?0:"polyline"===e?1:"polygon"===e?2:3;return o(e.geometryType)-o(r.geometryType)}));const b=(i instanceof File?i.name:"lpkx-layer").replace(/[^a-zA-Z0-9_.-]/g,"_"),d=e.bbox||[],g=new r({xmin:d[0],ymin:d[1],xmax:d[2],ymax:d[3],spatialReference:new o({wkid:Number(e.outCrs||o.WebMercator)})});return new t({title:b,url:s,sublayers:p.reverse(),visible:!0,fullExtent:g})}function c(e){if(e)return"CIMPolygonSymbol"===e.type?(m="polygon",function(e){return{type:"cim",data:{type:"CIMSymbolReference",symbol:{type:"CIMPolygonSymbol",symbolLayers:e.symbolLayers??[]}}}}(e)):"CIMLineSymbol"===e.type?(m="polyline",function(e){return{type:"cim",data:{type:"CIMSymbolReference",symbol:{type:"CIMLineSymbol",symbolLayers:e.symbolLayers??[]}}}}(e)):"CIMPointSymbol"===e.type?(m="point",function(e){return{type:"cim",data:{type:"CIMSymbolReference",symbol:{type:"CIMPointSymbol",symbolLayers:e.symbolLayers}}}}(e)):void 0}function u(e,r){return(e.labelClasses??[]).map((o=>{const t=(n=o.textSymbol?.symbol,n&&"object"==typeof n&&"CIMTextSymbol"===n.type?n:void 0);var n;return{labelExpression:p(o,e),labelPlacement:f(r),where:o.whereClause??"",minScale:o.minScale??0,maxScale:o.maxScale??0,symbol:new a({color:b(t)??s(y++,"polygon").color,haloSize:h(t),haloColor:I(t),kerning:C(t?.kerning),...S(t),font:g(t)})}}))}function f(e){return"point"===e||"Points"===e?"above-right":"polyline"===e||"Polylines"===e?"center-along":"polygon"===e||"Polygons"===e?"always-horizontal":"above-right"}function p(e,r){return e.expression??`$feature.${r.displayField}`}function b(e){const r=e?.symbol?.symbolLayers?.find((e=>"CIMSolidFill"===e.type)),o=r;return d(o?.color)}function d(r){if(!r)return;let o;if(Array.isArray(r))o=r;else{const e=r.values;if(!e)return;"function"==typeof e?o=Array.from(e()):Array.isArray(e)?o=e:Symbol.iterator in Object(e)&&(o=Array.from(e))}if(!o)return;if("CIMHSVColor"===(Array.isArray(r)?void 0:r.type)){let[r=0,t=0,n=0,l=100]=o;t/=100,n/=100;const i=n*(1-t/2),a=0===i||1===i?0:(n-i)/Math.min(i,1-i),s=new e(`hsla(${r}, ${100*a}%, ${100*i}%, ${l/100})`);return[s.r,s.g,s.b,s.a]}return o}function g(e){const r=e?.fontStyleName??"";return new i({family:e?.fontFamilyName,size:e?.height,weight:r.includes("Bold")?"bold":"normal",style:r.includes("Italic")?"italic":"normal"})}function S(e){return{horizontalAlignment:e?.horizontalAlignment?.toLowerCase(),verticalAlignment:e?.verticalAlignment?.toLowerCase()}}function C(e){return"boolean"==typeof e?e:void 0}function h(e){const r=e?.haloSize;if(null==r)return;const o="string"==typeof r?parseFloat(r):Number(r);return Number.isFinite(o)?o:void 0}function I(e){const r=e?.haloSymbol,o=r?.symbolLayers?.find((e=>"CIMSolidFill"===e.type)),t=o;return d(t?.color)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "data:application/octet-stream;base64,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"
|
|
1
|
+
window.navigationData = "data:application/octet-stream;base64,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"
|