@vertigis/arcgis-extensions 33.5.4 → 34.0.1
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/docs/html/assets/js/search.js +1 -1
- package/docs/html/classes/mapping_mapextension.mapextension.html +13 -13
- package/docs/html/classes/utilities_geometry.coordinatesystembounds.html +5 -5
- package/docs/html/interfaces/utilities_geometry.geographictransformationjson.html +1 -1
- package/docs/html/interfaces/utilities_geometry.geographictransformationstepjson.html +3 -3
- package/docs/html/interfaces/utilities_geometry.geojsonlinestring.html +2 -2
- package/docs/html/interfaces/utilities_geometry.geojsonmultilinestring.html +2 -2
- package/docs/html/interfaces/utilities_geometry.geojsonmultipoint.html +2 -2
- package/docs/html/interfaces/utilities_geometry.geojsonmultipolygon.html +2 -2
- package/docs/html/interfaces/utilities_geometry.geojsonpoint.html +2 -2
- package/docs/html/interfaces/utilities_geometry.geojsonpolygon.html +2 -2
- package/docs/html/interfaces/utilities_geometry.gmloptions.html +3 -3
- package/docs/html/modules/mapping__sublayerextension.html +1 -1
- package/docs/html/modules/mapping_mapextension.html +1 -1
- package/docs/html/modules/utilities_esri.html +35 -0
- package/docs/html/modules/utilities_geometry.html +25 -25
- package/docs/html/modules/version.html +1 -1
- package/mapping/MapExtension.js +1 -1
- package/mapping/_SublayerExtension.d.ts +1 -1
- package/mapping/_SublayerExtension.js +1 -1
- package/mapping/support/DefaultSublayerExtensionFactory.js +1 -1
- package/package.json +1 -1
- package/utilities/esri.d.ts +6 -0
- package/utilities/esri.js +1 -1
- package/utilities/geometry.js +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/utilities/geometry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import Extent from"@arcgis/core/geometry/Extent";import Multipoint from"@arcgis/core/geometry/Multipoint";import Point from"@arcgis/core/geometry/Point";import Polygon from"@arcgis/core/geometry/Polygon";import Polyline from"@arcgis/core/geometry/Polyline";import SpatialReference from"@arcgis/core/geometry/SpatialReference";import{buffer as esriBuffer,difference,geodesicBuffer as esriGeodesicBuffer,union}from"@arcgis/core/geometry/geometryEngine";import{isSupported,isLoaded,load,getTransformation,project as projectionEngineProject}from"@arcgis/core/geometry/projection";import{canProject,project as webMercatorProject}from"@arcgis/core/geometry/support/webMercatorUtils";import{buffer as esriGeometryServiceBuffer,project as esriGeometryServiceProject}from"@arcgis/core/rest/geometryService";import BufferParameters from"@arcgis/core/rest/support/BufferParameters";import ProjectParameters from"@arcgis/core/rest/support/ProjectParameters";import{ArgumentError}from"../ArgumentError.js";import{config}from"../config.js";import{GeometryServiceError}from"./GeometryServiceError.js";import{getGmlNS,ogcSrsToEsriSr}from"./_ogc.js";import{groupBy}from"./array.js";import{checkArg}from"./checkArg.js";import{parse}from"./number.js";const wktRegex=/^(POINT|MULTIPOINT|LINESTRING|MULTILINESTRING|POLYGON)\s(?:(ZM|Z|M)\s)?(\(.+\))$/,wktPointRegex=/^\(?([-\d.]+)\s([-\d.]+)(?:\s([-\d.]+))?(?:\s([-\d.]+))?\)?$/,wktArrayRegex=/^\(([-\d.\s(),]+)\)$/,gmlToEsriParseError="Unable to convert the GML geometry into an Esri geometry.",DEFAULT_GEOMETRY_SERVICE_URL="https://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer",wktNameRegex=/^(PROJCS|GEOGCS|VERTCS|GEOGTRAN|VERTTRAN)\s?\[\s?"(\w+)",.*/,commonWktStrings={4326:{name:"GCS_WGS_1984",wkt:'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]'},102100:{name:"WGS_1984_Web_Mercator_Auxiliary_Sphere",wkt:'PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]]'}},wktModules={PROJCS:"projected",GEOGCS:"geographic",VERTCS:"vertical",GEOGTRAN:"transformations",VERTTRAN:"vertical-transformations"},wktData={};export class CoordinateSystemBounds{constructor(e){this.limit=e}get min(){return-this.limit}get max(){return this.limit}get range(){return 2*this.limit}}export const WEB_MERCATOR_BOUNDS=new CoordinateSystemBounds(20037508.342788905);export const GEOGRAPHIC_BOUNDS=new CoordinateSystemBounds(180);export function getBounds(e){return e.isWebMercator?WEB_MERCATOR_BOUNDS:e.isGeographic?GEOGRAPHIC_BOUNDS:void 0}export function getScreenExtent(e){if(!e||0===e.length)return;let r,t,n,o;const{spatialReference:i}=e[0];let s;i.isWebMercator?s=WEB_MERCATOR_BOUNDS:i.isGeographic&&(s=GEOGRAPHIC_BOUNDS);const a=(e,i)=>{(!t||e>t)&&(t=e),(!r||e<r)&&(r=e),(!o||i>o)&&(o=i),(!n||i<n)&&(n=i)},c=e=>s&&Math.sign(e.extent.xmax)!==Math.sign(e.extent.xmin),l=e=>{const r=c(e)?denormalize([e.points],s)[0]:e.points;for(const e of r)a(e[0],e[1])},m=e=>{const r=c(e)?denormalize(e.rings,s):e.rings;for(const e of r)for(const r of e)a(r[0],r[1])},g=e=>{const r=c(e)?denormalize(e.paths,s):e.paths;for(const e of r)for(const r of e)a(r[0],r[1])};for(const r of e.filter((e=>e.spatialReference.equals(i))))switch(r.type){case"point":a(r.x,r.y);break;case"multipoint":l(r);break;case"extent":m(Polygon.fromExtent(r));break;case"polyline":g(r);break;case"polygon":m(r);break;default:throw new Error(`Cannot determine a valid screen extent for geometry type ${r.type}`)}return new Extent({xmin:r>t?t:r,xmax:t<r?r:t,ymin:n,ymax:o,spatialReference:i})}function denormalize(e,r){if(!r)return e;const t=[...e];let n=-1/0,o=1/0;for(let e of t){let t=-1/0,i=1/0;for(const n of e){for(;n[0]<r.min;)n[0]+=r.range;for(;n[0]>r.max;)n[0]-=r.range;i=Math.min(i,n[0]),t=Math.max(t,n[0])}let s=Math.min(o,i),a=Math.max(n,t);if(a-s>r.limit){t=-1/0,i=1/0;const c=[...e];for(const e of c)e[0]<0?e[0]+=r.range:e[0]-=r.range,i=Math.min(i,e[0]),t=Math.max(t,e[0]);const l=Math.min(o,i),m=Math.max(n,t);m-l<a-s&&(e=c,s=l,a=m)}o=Math.min(s,i),n=Math.max(a,t)}return t}export function denormalizeExtent(e,r){if(!r)return e;const t=Polygon.fromExtent(e);return t.rings=denormalize(t.rings,r),t.extent}export function esriToWKT(e){checkArg("geometry",e).isNotMissing();const r=`${e.hasZ?"Z":""}${e.hasM?"M":""}${e.hasM||e.hasZ?" ":""}`;if(isPoint(e)){const{x:t,y:n,z:o,m:i}=e,s=[t,n];return e.hasZ&&s.push(o),e.hasM&&s.push(i),`POINT ${r}(${_createWktPoint(s)})`}if(isMultipoint(e))return`MULTIPOINT ${r}(${_createWktPointArray(e.points)})`;if(isPolyline(e))return e.paths.length>1?`MULTILINESTRING ${r}(${_createWkt2DPointArray(e.paths)})`:`LINESTRING ${r}(${_createWktPointArray(e.paths[0])})`;if(isPolygon(e))return`POLYGON ${r}(${_createWkt2DPointArray(e.rings)})`;if(isExtent(e)){const t=[e.xmin,e.ymax];return`POLYGON ${r}(${_createWkt2DPointArray([[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]])})`}throw new ArgumentError("Cannot determine what type of WKT geometry to create")}export function wktToEsri(e,r){var t,n;checkArg("geometry",e).isNotMissing();const o=e.match(wktRegex);if(o){const e=null===(t=o[2])||void 0===t?void 0:t.includes("Z"),i=null===(n=o[2])||void 0===n?void 0:n.includes("M");switch(o[1]){case"POINT":{const t=_parseWktPoint(o[3],o[2]);return new Point({x:t[0],y:t[1],z:e?t[2]:void 0,m:!e&&i?t[2]:i?t[3]:void 0,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"MULTIPOINT":{const t=_parseWktPointArray(o[3],o[2]);return new Multipoint({points:t,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"LINESTRING":{const t=_parseWktPointArray(o[3],o[2]);return new Polyline({paths:[t],hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"MULTILINESTRING":{const t=_parseWkt2DPointArray(o[3],o[2]);return new Polyline({paths:t,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"POLYGON":{const t=_parseWkt2DPointArray(o[3],o[2]);return new Polygon({rings:t,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}}}throw new ArgumentError("Cannot determine what type of esri geometry to create")}export function esriToGeoJSON(e){if(checkArg("geometry",e).isNotMissing(),isPoint(e)){const{x:r,y:t}=e;return{type:"Point",coordinates:[r,t]}}if(isMultipoint(e))return{type:"MultiPoint",coordinates:e.points};if(isPolyline(e))return e.paths.length>1?{type:"MultiLineString",coordinates:e.paths}:{type:"LineString",coordinates:e.paths[0]};if(isPolygon(e))return{type:"Polygon",coordinates:e.rings};if(isExtent(e)){const r=[e.xmin,e.ymax];return{type:"Polygon",coordinates:[[r,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],r]]}}throw new ArgumentError("Cannot determine what type of WKT geometry to create")}export function geoJSONToEsri(e){switch(checkArg("geometry",e).isNotMissing(),checkArg("geometry.type",e.type).isNotMissing(),e.type){case"Point":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSONPoint),new Point({x:e.coordinates[0],y:e.coordinates[1],spatialReference:SpatialReference.WGS84});case"MultiPoint":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSONPointArray),new Multipoint({points:e.coordinates,spatialReference:SpatialReference.WGS84});case"LineString":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSONPointArray),new Polyline({paths:[e.coordinates],spatialReference:SpatialReference.WGS84});case"MultiLineString":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSON2DPointArray),new Polyline({paths:e.coordinates,spatialReference:SpatialReference.WGS84});case"Polygon":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSON2DPointArray),new Polygon({rings:e.coordinates,spatialReference:SpatialReference.WGS84});case"MultiPolygon":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSON2DPointArrayArray),new Polygon({rings:e.coordinates.flat(),spatialReference:SpatialReference.WGS84})}throw new ArgumentError("Cannot determine what type of esri geometry to create")}export function gmlToEsri(e){switch(checkArg("geometry",e).isNotMissing(),e.localName){case"Point":return _createEsriPoint(e);case"MultiPoint":return _createEsriMultiPoint(e);case"LineString":case"Curve":case"MultiLineString":case"MultiCurve":return _createEsriPolyline(e);case"Polygon":case"MultiPolygon":return _createEsriPolygon(e);default:throw new ArgumentError("Unrecognized geometry type.")}}export function esriToGml(e,r){switch(checkArg("geometry",e).isNotMissing(),checkArg("geometry type",e.type).isNotMissing(),checkArg("gmlVersion",r.gmlVersion).isNotMissing(),e.type){case"point":return _createGmlPointElement(e,r);case"polyline":return _createGmlLineStringElement(e,r);case"polygon":case"extent":return _createGmlPolygonElement(e,r);default:throw new ArgumentError(`Unrecognized geometry type: ${e.type}. Must be one of point, polyline or polygon.`)}}export async function esriWkidToWkt(e){checkArg("wkid",e).isNotMissing();let r=commonWktStrings[`${e}`];if(!r)for(const t of Object.keys(wktModules)){const n=wktModules[t];if(r=(await fetchEsriProjCodes(n))[e],r){const t=r.wkt.match(wktNameRegex);commonWktStrings[e]={name:t[2],wkt:r.wkt};break}}if(!r)throw new Error(`Failed to find Wkt for id ${e}`);return r.wkt}export async function esriWktToWkid(e){checkArg("wkt",e).isNotMissing();const r=e.match(wktNameRegex);if(r){let e=Object.keys(commonWktStrings).find((e=>commonWktStrings[e].name===r[2]));if(!e){const t=wktModules[r[1]];if(t){const n=await fetchEsriProjCodes(t);e=Object.keys(n).find((e=>n[e].name===r[2])),e&&(commonWktStrings[e]={name:r[2],wkt:n[e].wkt})}}if(e)return parseInt(e)}throw new Error(`Failed to find Wkid for ${e}`)}export function createCrossTypeUnion(e){const r=[],t=groupBy(e,(e=>e.type));for(const e of GEOM_ORDER){const n=t.get(e);let o;if(null==n?void 0:n.length){o=n.length>1?union(n):n[0];for(const e of r)o=difference(o,e);o&&r.push(o)}}return r}const GEOM_ORDER=["mesh","extent","polygon","polyline","multipoint","point"];async function fetchEsriProjCodes(e){if(void 0===wktData[e])switch(e){case wktModules.GEOGCS:wktData[e]=(await import("esri-proj-codes/geographic.json")).default;break;case wktModules.PROJCS:wktData[e]=(await import("esri-proj-codes/projected.json")).default;break;case wktModules.GEOGTRAN:wktData[e]=(await import("esri-proj-codes/transformations.json")).default;break;case wktModules.VERTCS:wktData[e]=(await import("esri-proj-codes/vertical.json")).default;break;case wktModules.VERTTRAN:wktData[e]=(await import("esri-proj-codes/vertical-transformations.json")).default}const r=wktData[e];if(!r)throw new Error(`Invalid esri-proj-codes module: ${e}`);return r}export async function project(e,r,t){checkArg("geometries",e).isNotMissing().satisfies(_geometriesAreUniform,"All geometries must have the same type and spatial reference."),checkArg("outSpatialReference",r).isNotMissing();const n=Array.from(e);if(n.length<=0)return n;const o=_getInputSpatialReference(e),i=_getProjectOptions(o,r,t);if(void 0===i){if(o.equals(r))return n;if(canProject(o,r))return n.map((e=>webMercatorProject(e,r)));if(isSupported()&&(isLoaded()||await load(),null!==getTransformation(o,r))){const e=projectionEngineProject(n,r);return Array.isArray(e)?e:[e]}}if(i&&i.steps.length>1)throw new ArgumentError("GeographicTransformation","Geometry Service can't handle a two step transformation");return _projectWithGeometryService(n,r,i)}export async function buffer(e,r,t,n=!1){const o=Array.isArray(e),i=Array.isArray(r);if(o!==i)throw new ArgumentError("Geometries and distances must be the same type.");const s=Array.isArray(e)?e[0].spatialReference:e.spatialReference;if(s.isWebMercator||s.isWGS84)return esriGeodesicBuffer(e,r,t,n);if(s.isGeographic){const s=new BufferParameters({geometries:o?e:[e],distances:i?r:[r],unit:t,unionResults:n});return esriGeometryServiceBuffer(getGeometryServiceUrl(),s)}return esriBuffer(e,r,t,n)}export function removeZValues(e){const r=e;switch(r.type){case"point":r.z=void 0;break;case"polyline":case"polygon":_removeZCoords(r.paths||r.rings,r.hasM).forEach(((e,t)=>e.forEach(((e,n)=>r.setPoint(t,n,e)))));break;case"extent":r.zmax=void 0,r.zmin=void 0}return r}function _removeZCoords(e,r=!1){const t=r?3:2;return e.map((e=>e.map((e=>e.slice(0,t)))))}function _createWktPoint(e){return e.join(" ")}function _createWktPointArray(e){return e.map(_createWktPoint).join(", ")}function _createWkt2DPointArray(e){return e.map((e=>`(${_createWktPointArray(e)})`)).join(", ")}function _parseInvariant(e){return parse({locale:"inv"},e)}function _parseWktPoint(e,r){const t=null!=r?r:"",n=e.match(wktPointRegex);if(n){const e=[_parseInvariant(n[1]),_parseInvariant(n[2])];return(t.includes("Z")||!t.includes("Z")&&t.includes("M"))&&n[3]&&e.push(_parseInvariant(n[3])),t.includes("M")&&n[4]&&e.push(_parseInvariant(n[4])),e}throw new ArgumentError(`Detected invalid WKT point: ${e}`)}function _parseWktPointArray(e,r){const t=e.match(wktArrayRegex);if(t)return _parseWktArray(t[1]).map((e=>_parseWktPoint(e,r)));throw new ArgumentError(`Detected invalid WKT point array: ${e}`)}function _parseWkt2DPointArray(e,r){const t=e.match(wktArrayRegex);if(t)return _parseWktArray(t[1]).map((e=>_parseWktPointArray(e,r)));throw new ArgumentError(`Detected invalid WKT 2D point array: ${e}`)}function _parseWktArray(e){let r=e.trim().replace(/\s*,\s*/g,","),t=0;for(let e=0;e<r.length;e++)switch(r.charAt(e)){case"(":t++;break;case")":t--;break;case",":0===t&&(r=`${r.substr(0,e)}&${r.substr(e+1)}`)}return r.split("&")}function _isGeoJSONPoint(e){return!!Array.isArray(e)&&!e.some((e=>"number"!=typeof e))}function _isGeoJSONPointArray(e){return!!Array.isArray(e)&&!e.some((e=>!_isGeoJSONPoint(e)))}function _isGeoJSON2DPointArray(e){return!!Array.isArray(e)&&!e.some((e=>!_isGeoJSONPointArray(e)))}function _isGeoJSON2DPointArrayArray(e){return!!Array.isArray(e)&&!e.some((e=>!_isGeoJSON2DPointArray(e)))}async function _projectWithGeometryService(e,r,t){const n=new ProjectParameters({geometries:e,outSpatialReference:r});(null==t?void 0:t.hasOwnProperty("transformation"))&&(n.transformation=t.steps[0].wkid?{wkid:t.steps[0].wkid}:{wkt:t.steps[0].wkt},n.transformForward=!t.hasOwnProperty("transformForward")||!t.steps[0].isInverse);try{return await esriGeometryServiceProject(getGeometryServiceUrl(),n)}catch(e){throw new GeometryServiceError(e)}}function _geometriesAreUniform(e){const r=[...e];if(!(r.length>0))return!0;const t=r[0].type,n=r[0].spatialReference;return r.every((e=>e.type===t&&e.spatialReference.equals(n)))}function _getInputSpatialReference(e){for(const r of e)if(null!==(null==r?void 0:r.spatialReference))return r.spatialReference;return SpatialReference.WebMercator}function _getProjectOptions(e,r,t){return(null==t?void 0:t.hasOwnProperty("steps"))?{...t}:_getTransformProjectOptions(e,r)}function _getTransformProjectOptions(e,r){if(checkArg("inSr",e).isNotMissing(),checkArg("outSR",r).isNotMissing(),0===config.autoTransformations.length)return;const t=config.autoTransformations.filter((r=>r.inSpatialReference.equals(e))).filter((e=>e.outSpatialReference.equals(r)));if(t.length>0)return{...t[0].transformation};const n=config.autoTransformations.filter((e=>e.inSpatialReference.equals(r))).filter((r=>r.outSpatialReference.equals(e)));return n.length>0?{...n[0].transformation}:void 0}function _createEsriPoint(e){const r=_getEsriSpatialReference(e),t=_parseGmlCoordPair(e);if(t&&t.length>1)return new Point({x:t[0],y:t[1],spatialReference:r});throw new ArgumentError(gmlToEsriParseError)}function _createEsriMultiPoint(e){const r=new Array,t=_getEsriSpatialReference(e);if(e.childElementCount>0){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"pointMember")),n=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"pointMembers")),o=t.concat(...n);for(const e of o){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"Point"));for(const e of t)r.push(_parseGmlCoordPair(e))}}if(r&&r.length>0)return new Multipoint({points:r,spatialReference:t});throw new ArgumentError(gmlToEsriParseError)}function _createEsriPolyline(e){let r;const t=_getEsriSpatialReference(e);if("LineString"===e.localName?r=_parseGmlLineString(e):"Curve"===e.localName&&e.childElementCount>0?r=_parseGmlCurve(e):"MultiLineString"===e.localName&&e.childElementCount>0?r=_parseGmlMultiLineString(e):"MultiCurve"===e.localName&&e.childElementCount>0&&(r=_parseGmlMultiCurve(e)),r&&r.length>0)return new Polyline({paths:r,spatialReference:t});throw new ArgumentError(gmlToEsriParseError)}function _createEsriPolygon(e){let r;const t=_getEsriSpatialReference(e);if("Polygon"===e.localName?r=_parseGmlPolygon(e):"MultiPolygon"===e.localName&&(r=_parseGmlMultiPolygon(e)),r&&r.length>0)return new Polygon({rings:r,spatialReference:t});throw new ArgumentError(gmlToEsriParseError)}function _parseGmlLineString(e){return[_parseGmlCoords(e)]}function _parseGmlCurve(e){const r=new Array,t=e.getElementsByTagNameNS(e.namespaceURI,"segments");if(t.length>0){const n=Array.from(t[0].getElementsByTagNameNS(e.namespaceURI,"LineStringSegment"));for(const e of n){const t=_parseGmlCoords(e);r.push(t)}}return r}function _parseGmlMultiLineString(e){const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"lineStringMember"));for(const e of t){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"LineString"));for(const e of t)r.push(_parseGmlCoords(e))}return r}function _parseGmlMultiCurve(e){const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"curveMember")),n=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"curveMembers")),o=t.concat(...n);for(const e of o){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"LineString"));for(const e of t)r.push(_parseGmlCoords(e))}return r}function _parseGmlPolygon(e){checkArg("geometry",e).isNotMissing();const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"outerBoundaryIs")),n=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"innerBoundaryIs")),o=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"exterior")),i=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"interior")),s=t.concat(...n).concat(...o).concat(...i);for(const e of s){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"LinearRing"));for(const e of t)r.push(_parseGmlCoords(e))}return r}function _parseGmlMultiPolygon(e){checkArg("geometry",e).isNotMissing();const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"polygonMember"));for(const e of t){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"Polygon"));for(const e of t){const t=_parseGmlPolygon(e);r.push(...t)}}return r}function _parseGmlCoordPair(e){if(checkArg("geometry",e).isNotMissing(),"Point"!==e.localName)throw new ArgumentError(gmlToEsriParseError);const r=e.getElementsByTagNameNS(e.namespaceURI,"coordinates"),t=e.getElementsByTagNameNS(e.namespaceURI,"pos");if(r.length>0&&r[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseGmlCoordPairFromString(r[0].childNodes[0].data)}if(t.length>0&&t[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseGmlCoordPairFromString(t[0].childNodes[0].data)}throw new ArgumentError(gmlToEsriParseError)}function _parseGmlCoordPairFromString(e){const r=e.replace(/,/g,"").split(" ").map(Number);if(2===r.length)return[r[0],r[1]];throw new ArgumentError(gmlToEsriParseError)}function _parseGmlCoords(e){if(checkArg("geometry",e).isNotMissing(),"LineString"!==e.localName&&"LinearRing"!==e.localName&&"LineStringSegment"!==e.localName)throw new ArgumentError(gmlToEsriParseError);const r=e.getElementsByTagNameNS(e.namespaceURI,"coordinates"),t=e.getElementsByTagNameNS(e.namespaceURI,"posList");if(r.length>0&&r[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseCoordsFromString(r[0].childNodes[0].data)}if(t.length>0&&t[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseCoordsFromString(t[0].childNodes[0].data)}throw new ArgumentError(gmlToEsriParseError)}function _parseCoordsFromString(e){const r=e.replace(/,/g,"").split(" ").map(Number),t=new Array;for(let e=0;e<r.length;e+=2){if(void 0===r[e+1])throw new ArgumentError(gmlToEsriParseError);t.push([r[e],r[e+1]])}if(t.length>0)return t;throw new ArgumentError(gmlToEsriParseError)}function _getEsriSpatialReference(e){return checkArg("geometry",e).isNotMissing(),e.hasAttribute("srsName")?ogcSrsToEsriSr(e.getAttribute("srsName")):SpatialReference.WebMercator}function _createGmlPointElement(e,r){const t=getGmlNS(r.gmlVersion),n=_createElementWithNS(t,"Point","gml");let o,i;_applySrsAttributes(n,_getSrsName(e,r),r.hasOwnProperty("srsDimension")?r.srsDimension:void 0),"2.0"===r.gmlVersion||"3.0"===r.gmlVersion?(o=_createElementWithNS(t,"coordinates","gml"),i=_esriPointToString(", ",e)):(o=_createElementWithNS(t,"pos","gml"),i=_esriPointToString(" ",e)),n.appendChild(o);const s=_createTextNode(i);return o.appendChild(s),n}function _createGmlLineStringElement(e,r){const t=getGmlNS(r.gmlVersion),n=_createElementWithNS(t,"LineString","gml");let o,i;_applySrsAttributes(n,_getSrsName(e,r),r.hasOwnProperty("srsDimension")?r.srsDimension:void 0),"2.0"===r.gmlVersion||"3.0"===r.gmlVersion?(o=_createElementWithNS(t,"coordinates","gml"),i=_esriPolylineToString(", ",e)):(o=_createElementWithNS(t,"posList","gml"),i=_esriPolylineToString(" ",e)),n.appendChild(o);const s=_createTextNode(i);return o.appendChild(s),n}function _createGmlPolygonElement(e,r){const t=getGmlNS(r.gmlVersion),n=_createElementWithNS(t,"Polygon","gml");_applySrsAttributes(n,_getSrsName(e,r),r.hasOwnProperty("srsDimension")?r.srsDimension:void 0);const o="2.0"===r.gmlVersion?_createElementWithNS(t,"outerBoundaryIs","gml"):_createElementWithNS(t,"exterior","gml");n.appendChild(o);const i=_createElementWithNS(t,"LinearRing","gml");let s,a;o.appendChild(i),"2.0"===r.gmlVersion||"3.0"===r.gmlVersion?(s=_createElementWithNS(t,"coordinates","gml"),a=_esriPolygonToString(", ",e)):(s=_createElementWithNS(t,"posList","gml"),a=_esriPolygonToString(" ",e)),i.appendChild(s);const c=_createTextNode(a);return s.appendChild(c),n}function _getSrsName(e,r){if(r.hasOwnProperty("srsName"))return r.srsName;if(void 0!==e.spatialReference.wkid&&null!==e.spatialReference.wkid){if(e.spatialReference.wkid<32767)return`EPSG:${e.spatialReference.wkid}`;if(102100===e.spatialReference.wkid||900913===e.spatialReference.wkid||102113===e.spatialReference.wkid)return"EPSG:3857"}throw new ArgumentError("Unable to convert Esri WKT spatial reference to an OGC spatial reference")}function _applySrsAttributes(e,r,t){if(null!=r&&(e.setAttribute("srsName",r),null!=t)){const r=t<1?2:t;e.setAttribute("srsDimension",r.toString())}}function _createElementWithNS(e,r,t){checkArg("namespace",e).isNotMissing(),checkArg("name",r).isNotMissing();return document.implementation.createDocument(void 0,"temp",void 0).createElementNS(e,t?`${t}:${r}`:r)}function _createTextNode(e){return document.implementation.createDocument(void 0,"temp",void 0).createTextNode(e)}function _esriPointToString(e,r){const t=r;return" "===e?`${t.x} ${t.y}`:`${t.x}, ${t.y}`}function _esriPolylineToString(e,r){return r.paths[0].map((r=>r.join(e))).join(" ")}function _esriPolygonToString(e,r){let t;if(isPolygon(r))t=r.rings[0];else if(isExtent(r)){const{xmin:e,xmax:n,ymin:o,ymax:i}=r;t=[[e,i],[n,i],[n,o],[e,o],[e,i]]}return t.map((r=>r.join(e))).join(" ")}function getGeometryServiceUrl(){var e,r,t;return null!==(t=null!==(e=config.geometryServiceUrl)&&void 0!==e?e:null===(r=config._geometryService)||void 0===r?void 0:r.url)&&void 0!==t?t:DEFAULT_GEOMETRY_SERVICE_URL}export function isGeometry(e){return isPoint(e)||isMultipoint(e)||isPolyline(e)||isPolygon(e)||isExtent(e)||isMesh(e)}export function isPoint(e){return"point"===(null==e?void 0:e.type)}export function isMultipoint(e){return"multipoint"===(null==e?void 0:e.type)}export function isPolyline(e){return"polyline"===(null==e?void 0:e.type)}export function isPolygon(e){return"polygon"===(null==e?void 0:e.type)}export function isExtent(e){return"extent"===(null==e?void 0:e.type)}export function isMesh(e){return"mesh"===(null==e?void 0:e.type)}
|
|
1
|
+
import Extent from"@arcgis/core/geometry/Extent";import Multipoint from"@arcgis/core/geometry/Multipoint";import Point from"@arcgis/core/geometry/Point";import Polygon from"@arcgis/core/geometry/Polygon";import Polyline from"@arcgis/core/geometry/Polyline";import SpatialReference from"@arcgis/core/geometry/SpatialReference";import{buffer as esriBuffer,difference,geodesicBuffer as esriGeodesicBuffer,union}from"@arcgis/core/geometry/geometryEngine";import{isSupported,isLoaded,load,getTransformation,project as projectionEngineProject}from"@arcgis/core/geometry/projection";import{canProject,project as webMercatorProject}from"@arcgis/core/geometry/support/webMercatorUtils";import{buffer as esriGeometryServiceBuffer,project as esriGeometryServiceProject}from"@arcgis/core/rest/geometryService";import BufferParameters from"@arcgis/core/rest/support/BufferParameters";import ProjectParameters from"@arcgis/core/rest/support/ProjectParameters";import{ArgumentError}from"../ArgumentError.js";import{config}from"../config.js";import{GeometryServiceError}from"./GeometryServiceError.js";import{getGmlNS,ogcSrsToEsriSr}from"./_ogc.js";import{groupBy}from"./array.js";import{checkArg}from"./checkArg.js";import{isEsriObject}from"./esri.js";import{parse}from"./number.js";const wktRegex=/^(POINT|MULTIPOINT|LINESTRING|MULTILINESTRING|POLYGON)\s(?:(ZM|Z|M)\s)?(\(.+\))$/,wktPointRegex=/^\(?([-\d.]+)\s([-\d.]+)(?:\s([-\d.]+))?(?:\s([-\d.]+))?\)?$/,wktArrayRegex=/^\(([-\d.\s(),]+)\)$/,gmlToEsriParseError="Unable to convert the GML geometry into an Esri geometry.",DEFAULT_GEOMETRY_SERVICE_URL="https://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer",wktNameRegex=/^(PROJCS|GEOGCS|VERTCS|GEOGTRAN|VERTTRAN)\s?\[\s?"(\w+)",.*/,commonWktStrings={4326:{name:"GCS_WGS_1984",wkt:'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]'},102100:{name:"WGS_1984_Web_Mercator_Auxiliary_Sphere",wkt:'PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]]'}},wktModules={PROJCS:"projected",GEOGCS:"geographic",VERTCS:"vertical",GEOGTRAN:"transformations",VERTTRAN:"vertical-transformations"},wktData={};export class CoordinateSystemBounds{constructor(e){this.limit=e}get min(){return-this.limit}get max(){return this.limit}get range(){return 2*this.limit}}export const WEB_MERCATOR_BOUNDS=new CoordinateSystemBounds(20037508.342788905);export const GEOGRAPHIC_BOUNDS=new CoordinateSystemBounds(180);export function getBounds(e){return e.isWebMercator?WEB_MERCATOR_BOUNDS:e.isGeographic?GEOGRAPHIC_BOUNDS:void 0}export function getScreenExtent(e){if(!e||0===e.length)return;let r,t,n,o;const{spatialReference:i}=e[0];let s;i.isWebMercator?s=WEB_MERCATOR_BOUNDS:i.isGeographic&&(s=GEOGRAPHIC_BOUNDS);const a=(e,i)=>{(!t||e>t)&&(t=e),(!r||e<r)&&(r=e),(!o||i>o)&&(o=i),(!n||i<n)&&(n=i)},c=e=>s&&Math.sign(e.extent.xmax)!==Math.sign(e.extent.xmin),l=e=>{const r=c(e)?denormalize([e.points],s)[0]:e.points;for(const e of r)a(e[0],e[1])},m=e=>{const r=c(e)?denormalize(e.rings,s):e.rings;for(const e of r)for(const r of e)a(r[0],r[1])},g=e=>{const r=c(e)?denormalize(e.paths,s):e.paths;for(const e of r)for(const r of e)a(r[0],r[1])};for(const r of e.filter((e=>e.spatialReference.equals(i))))switch(r.type){case"point":a(r.x,r.y);break;case"multipoint":l(r);break;case"extent":m(Polygon.fromExtent(r));break;case"polyline":g(r);break;case"polygon":m(r);break;default:throw new Error(`Cannot determine a valid screen extent for geometry type ${r.type}`)}return new Extent({xmin:r>t?t:r,xmax:t<r?r:t,ymin:n,ymax:o,spatialReference:i})}function denormalize(e,r){if(!r)return e;const t=[...e];let n=-1/0,o=1/0;for(let e of t){let t=-1/0,i=1/0;for(const n of e){for(;n[0]<r.min;)n[0]+=r.range;for(;n[0]>r.max;)n[0]-=r.range;i=Math.min(i,n[0]),t=Math.max(t,n[0])}let s=Math.min(o,i),a=Math.max(n,t);if(a-s>r.limit){t=-1/0,i=1/0;const c=[...e];for(const e of c)e[0]<0?e[0]+=r.range:e[0]-=r.range,i=Math.min(i,e[0]),t=Math.max(t,e[0]);const l=Math.min(o,i),m=Math.max(n,t);m-l<a-s&&(e=c,s=l,a=m)}o=Math.min(s,i),n=Math.max(a,t)}return t}export function denormalizeExtent(e,r){if(!r)return e;const t=Polygon.fromExtent(e);return t.rings=denormalize(t.rings,r),t.extent}export function esriToWKT(e){checkArg("geometry",e).isNotMissing();const r=`${e.hasZ?"Z":""}${e.hasM?"M":""}${e.hasM||e.hasZ?" ":""}`;if(isPoint(e)){const{x:t,y:n,z:o,m:i}=e,s=[t,n];return e.hasZ&&s.push(o),e.hasM&&s.push(i),`POINT ${r}(${_createWktPoint(s)})`}if(isMultipoint(e))return`MULTIPOINT ${r}(${_createWktPointArray(e.points)})`;if(isPolyline(e))return e.paths.length>1?`MULTILINESTRING ${r}(${_createWkt2DPointArray(e.paths)})`:`LINESTRING ${r}(${_createWktPointArray(e.paths[0])})`;if(isPolygon(e))return`POLYGON ${r}(${_createWkt2DPointArray(e.rings)})`;if(isExtent(e)){const t=[e.xmin,e.ymax];return`POLYGON ${r}(${_createWkt2DPointArray([[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]])})`}throw new ArgumentError("Cannot determine what type of WKT geometry to create")}export function wktToEsri(e,r){var t,n;checkArg("geometry",e).isNotMissing();const o=e.match(wktRegex);if(o){const e=null===(t=o[2])||void 0===t?void 0:t.includes("Z"),i=null===(n=o[2])||void 0===n?void 0:n.includes("M");switch(o[1]){case"POINT":{const t=_parseWktPoint(o[3],o[2]);return new Point({x:t[0],y:t[1],z:e?t[2]:void 0,m:!e&&i?t[2]:i?t[3]:void 0,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"MULTIPOINT":{const t=_parseWktPointArray(o[3],o[2]);return new Multipoint({points:t,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"LINESTRING":{const t=_parseWktPointArray(o[3],o[2]);return new Polyline({paths:[t],hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"MULTILINESTRING":{const t=_parseWkt2DPointArray(o[3],o[2]);return new Polyline({paths:t,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}case"POLYGON":{const t=_parseWkt2DPointArray(o[3],o[2]);return new Polygon({rings:t,hasZ:e,hasM:i,spatialReference:r||SpatialReference.WGS84})}}}throw new ArgumentError("Cannot determine what type of esri geometry to create")}export function esriToGeoJSON(e){if(checkArg("geometry",e).isNotMissing(),isPoint(e)){const{x:r,y:t}=e;return{type:"Point",coordinates:[r,t]}}if(isMultipoint(e))return{type:"MultiPoint",coordinates:e.points};if(isPolyline(e))return e.paths.length>1?{type:"MultiLineString",coordinates:e.paths}:{type:"LineString",coordinates:e.paths[0]};if(isPolygon(e))return{type:"Polygon",coordinates:e.rings};if(isExtent(e)){const r=[e.xmin,e.ymax];return{type:"Polygon",coordinates:[[r,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],r]]}}throw new ArgumentError("Cannot determine what type of WKT geometry to create")}export function geoJSONToEsri(e){switch(checkArg("geometry",e).isNotMissing(),checkArg("geometry.type",e.type).isNotMissing(),e.type){case"Point":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSONPoint),new Point({x:e.coordinates[0],y:e.coordinates[1],spatialReference:SpatialReference.WGS84});case"MultiPoint":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSONPointArray),new Multipoint({points:e.coordinates,spatialReference:SpatialReference.WGS84});case"LineString":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSONPointArray),new Polyline({paths:[e.coordinates],spatialReference:SpatialReference.WGS84});case"MultiLineString":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSON2DPointArray),new Polyline({paths:e.coordinates,spatialReference:SpatialReference.WGS84});case"Polygon":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSON2DPointArray),new Polygon({rings:e.coordinates,spatialReference:SpatialReference.WGS84});case"MultiPolygon":return checkArg("geometry.coordinates",e.coordinates).satisfies(_isGeoJSON2DPointArrayArray),new Polygon({rings:e.coordinates.flat(),spatialReference:SpatialReference.WGS84})}throw new ArgumentError("Cannot determine what type of esri geometry to create")}export function gmlToEsri(e){switch(checkArg("geometry",e).isNotMissing(),e.localName){case"Point":return _createEsriPoint(e);case"MultiPoint":return _createEsriMultiPoint(e);case"LineString":case"Curve":case"MultiLineString":case"MultiCurve":return _createEsriPolyline(e);case"Polygon":case"MultiPolygon":return _createEsriPolygon(e);default:throw new ArgumentError("Unrecognized geometry type.")}}export function esriToGml(e,r){switch(checkArg("geometry",e).isNotMissing(),checkArg("geometry type",e.type).isNotMissing(),checkArg("gmlVersion",r.gmlVersion).isNotMissing(),e.type){case"point":return _createGmlPointElement(e,r);case"polyline":return _createGmlLineStringElement(e,r);case"polygon":case"extent":return _createGmlPolygonElement(e,r);default:throw new ArgumentError(`Unrecognized geometry type: ${e.type}. Must be one of point, polyline or polygon.`)}}export async function esriWkidToWkt(e){checkArg("wkid",e).isNotMissing();let r=commonWktStrings[`${e}`];if(!r)for(const t of Object.keys(wktModules)){const n=wktModules[t];if(r=(await fetchEsriProjCodes(n))[e],r){const t=r.wkt.match(wktNameRegex);commonWktStrings[e]={name:t[2],wkt:r.wkt};break}}if(!r)throw new Error(`Failed to find Wkt for id ${e}`);return r.wkt}export async function esriWktToWkid(e){checkArg("wkt",e).isNotMissing();const r=e.match(wktNameRegex);if(r){let e=Object.keys(commonWktStrings).find((e=>commonWktStrings[e].name===r[2]));if(!e){const t=wktModules[r[1]];if(t){const n=await fetchEsriProjCodes(t);e=Object.keys(n).find((e=>n[e].name===r[2])),e&&(commonWktStrings[e]={name:r[2],wkt:n[e].wkt})}}if(e)return parseInt(e)}throw new Error(`Failed to find Wkid for ${e}`)}export function createCrossTypeUnion(e){const r=[],t=groupBy(e,(e=>e.type));for(const e of GEOM_ORDER){const n=t.get(e);let o;if(null==n?void 0:n.length){o=n.length>1?union(n):n[0];for(const e of r)o=difference(o,e);o&&r.push(o)}}return r}const GEOM_ORDER=["mesh","extent","polygon","polyline","multipoint","point"];async function fetchEsriProjCodes(e){if(void 0===wktData[e])switch(e){case wktModules.GEOGCS:wktData[e]=(await import("esri-proj-codes/geographic.json")).default;break;case wktModules.PROJCS:wktData[e]=(await import("esri-proj-codes/projected.json")).default;break;case wktModules.GEOGTRAN:wktData[e]=(await import("esri-proj-codes/transformations.json")).default;break;case wktModules.VERTCS:wktData[e]=(await import("esri-proj-codes/vertical.json")).default;break;case wktModules.VERTTRAN:wktData[e]=(await import("esri-proj-codes/vertical-transformations.json")).default}const r=wktData[e];if(!r)throw new Error(`Invalid esri-proj-codes module: ${e}`);return r}export async function project(e,r,t){checkArg("geometries",e).isNotMissing().satisfies(_geometriesAreUniform,"All geometries must have the same type and spatial reference."),checkArg("outSpatialReference",r).isNotMissing();const n=Array.from(e);if(n.length<=0)return n;const o=_getInputSpatialReference(e),i=_getProjectOptions(o,r,t);if(void 0===i){if(o.equals(r))return n;if(canProject(o,r))return n.map((e=>webMercatorProject(e,r)));if(isSupported()&&(isLoaded()||await load(),null!==getTransformation(o,r))){const e=projectionEngineProject(n,r);return Array.isArray(e)?e:[e]}}if(i&&i.steps.length>1)throw new ArgumentError("GeographicTransformation","Geometry Service can't handle a two step transformation");return _projectWithGeometryService(n,r,i)}export async function buffer(e,r,t,n=!1){const o=Array.isArray(e),i=Array.isArray(r);if(o!==i)throw new ArgumentError("Geometries and distances must be the same type.");const s=Array.isArray(e)?e[0].spatialReference:e.spatialReference;if(s.isWebMercator||s.isWGS84)return esriGeodesicBuffer(e,r,t,n);if(s.isGeographic){const s=new BufferParameters({geometries:o?e:[e],distances:i?r:[r],unit:t,unionResults:n});return esriGeometryServiceBuffer(getGeometryServiceUrl(),s)}return esriBuffer(e,r,t,n)}export function removeZValues(e){const r=e;switch(r.type){case"point":r.z=void 0;break;case"polyline":case"polygon":_removeZCoords(r.paths||r.rings,r.hasM).forEach(((e,t)=>e.forEach(((e,n)=>r.setPoint(t,n,e)))));break;case"extent":r.zmax=void 0,r.zmin=void 0}return r}function _removeZCoords(e,r=!1){const t=r?3:2;return e.map((e=>e.map((e=>e.slice(0,t)))))}function _createWktPoint(e){return e.join(" ")}function _createWktPointArray(e){return e.map(_createWktPoint).join(", ")}function _createWkt2DPointArray(e){return e.map((e=>`(${_createWktPointArray(e)})`)).join(", ")}function _parseInvariant(e){return parse({locale:"inv"},e)}function _parseWktPoint(e,r){const t=null!=r?r:"",n=e.match(wktPointRegex);if(n){const e=[_parseInvariant(n[1]),_parseInvariant(n[2])];return(t.includes("Z")||!t.includes("Z")&&t.includes("M"))&&n[3]&&e.push(_parseInvariant(n[3])),t.includes("M")&&n[4]&&e.push(_parseInvariant(n[4])),e}throw new ArgumentError(`Detected invalid WKT point: ${e}`)}function _parseWktPointArray(e,r){const t=e.match(wktArrayRegex);if(t)return _parseWktArray(t[1]).map((e=>_parseWktPoint(e,r)));throw new ArgumentError(`Detected invalid WKT point array: ${e}`)}function _parseWkt2DPointArray(e,r){const t=e.match(wktArrayRegex);if(t)return _parseWktArray(t[1]).map((e=>_parseWktPointArray(e,r)));throw new ArgumentError(`Detected invalid WKT 2D point array: ${e}`)}function _parseWktArray(e){let r=e.trim().replace(/\s*,\s*/g,","),t=0;for(let e=0;e<r.length;e++)switch(r.charAt(e)){case"(":t++;break;case")":t--;break;case",":0===t&&(r=`${r.substr(0,e)}&${r.substr(e+1)}`)}return r.split("&")}function _isGeoJSONPoint(e){return!!Array.isArray(e)&&!e.some((e=>"number"!=typeof e))}function _isGeoJSONPointArray(e){return!!Array.isArray(e)&&!e.some((e=>!_isGeoJSONPoint(e)))}function _isGeoJSON2DPointArray(e){return!!Array.isArray(e)&&!e.some((e=>!_isGeoJSONPointArray(e)))}function _isGeoJSON2DPointArrayArray(e){return!!Array.isArray(e)&&!e.some((e=>!_isGeoJSON2DPointArray(e)))}async function _projectWithGeometryService(e,r,t){const n=new ProjectParameters({geometries:e,outSpatialReference:r});(null==t?void 0:t.hasOwnProperty("transformation"))&&(n.transformation=t.steps[0].wkid?{wkid:t.steps[0].wkid}:{wkt:t.steps[0].wkt},n.transformForward=!t.hasOwnProperty("transformForward")||!t.steps[0].isInverse);try{return await esriGeometryServiceProject(getGeometryServiceUrl(),n)}catch(e){throw new GeometryServiceError(e)}}function _geometriesAreUniform(e){const r=[...e];if(!(r.length>0))return!0;const t=r[0].type,n=r[0].spatialReference;return r.every((e=>e.type===t&&e.spatialReference.equals(n)))}function _getInputSpatialReference(e){for(const r of e)if(null!==(null==r?void 0:r.spatialReference))return r.spatialReference;return SpatialReference.WebMercator}function _getProjectOptions(e,r,t){return(null==t?void 0:t.hasOwnProperty("steps"))?{...t}:_getTransformProjectOptions(e,r)}function _getTransformProjectOptions(e,r){if(checkArg("inSr",e).isNotMissing(),checkArg("outSR",r).isNotMissing(),0===config.autoTransformations.length)return;const t=config.autoTransformations.filter((r=>r.inSpatialReference.equals(e))).filter((e=>e.outSpatialReference.equals(r)));if(t.length>0)return{...t[0].transformation};const n=config.autoTransformations.filter((e=>e.inSpatialReference.equals(r))).filter((r=>r.outSpatialReference.equals(e)));return n.length>0?{...n[0].transformation}:void 0}function _createEsriPoint(e){const r=_getEsriSpatialReference(e),t=_parseGmlCoordPair(e);if(t&&t.length>1)return new Point({x:t[0],y:t[1],spatialReference:r});throw new ArgumentError(gmlToEsriParseError)}function _createEsriMultiPoint(e){const r=new Array,t=_getEsriSpatialReference(e);if(e.childElementCount>0){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"pointMember")),n=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"pointMembers")),o=t.concat(...n);for(const e of o){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"Point"));for(const e of t)r.push(_parseGmlCoordPair(e))}}if(r&&r.length>0)return new Multipoint({points:r,spatialReference:t});throw new ArgumentError(gmlToEsriParseError)}function _createEsriPolyline(e){let r;const t=_getEsriSpatialReference(e);if("LineString"===e.localName?r=_parseGmlLineString(e):"Curve"===e.localName&&e.childElementCount>0?r=_parseGmlCurve(e):"MultiLineString"===e.localName&&e.childElementCount>0?r=_parseGmlMultiLineString(e):"MultiCurve"===e.localName&&e.childElementCount>0&&(r=_parseGmlMultiCurve(e)),r&&r.length>0)return new Polyline({paths:r,spatialReference:t});throw new ArgumentError(gmlToEsriParseError)}function _createEsriPolygon(e){let r;const t=_getEsriSpatialReference(e);if("Polygon"===e.localName?r=_parseGmlPolygon(e):"MultiPolygon"===e.localName&&(r=_parseGmlMultiPolygon(e)),r&&r.length>0)return new Polygon({rings:r,spatialReference:t});throw new ArgumentError(gmlToEsriParseError)}function _parseGmlLineString(e){return[_parseGmlCoords(e)]}function _parseGmlCurve(e){const r=new Array,t=e.getElementsByTagNameNS(e.namespaceURI,"segments");if(t.length>0){const n=Array.from(t[0].getElementsByTagNameNS(e.namespaceURI,"LineStringSegment"));for(const e of n){const t=_parseGmlCoords(e);r.push(t)}}return r}function _parseGmlMultiLineString(e){const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"lineStringMember"));for(const e of t){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"LineString"));for(const e of t)r.push(_parseGmlCoords(e))}return r}function _parseGmlMultiCurve(e){const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"curveMember")),n=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"curveMembers")),o=t.concat(...n);for(const e of o){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"LineString"));for(const e of t)r.push(_parseGmlCoords(e))}return r}function _parseGmlPolygon(e){checkArg("geometry",e).isNotMissing();const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"outerBoundaryIs")),n=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"innerBoundaryIs")),o=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"exterior")),i=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"interior")),s=t.concat(...n).concat(...o).concat(...i);for(const e of s){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"LinearRing"));for(const e of t)r.push(_parseGmlCoords(e))}return r}function _parseGmlMultiPolygon(e){checkArg("geometry",e).isNotMissing();const r=new Array,t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"polygonMember"));for(const e of t){const t=Array.from(e.getElementsByTagNameNS(e.namespaceURI,"Polygon"));for(const e of t){const t=_parseGmlPolygon(e);r.push(...t)}}return r}function _parseGmlCoordPair(e){if(checkArg("geometry",e).isNotMissing(),"Point"!==e.localName)throw new ArgumentError(gmlToEsriParseError);const r=e.getElementsByTagNameNS(e.namespaceURI,"coordinates"),t=e.getElementsByTagNameNS(e.namespaceURI,"pos");if(r.length>0&&r[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseGmlCoordPairFromString(r[0].childNodes[0].data)}if(t.length>0&&t[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseGmlCoordPairFromString(t[0].childNodes[0].data)}throw new ArgumentError(gmlToEsriParseError)}function _parseGmlCoordPairFromString(e){const r=e.replace(/,/g,"").split(" ").map(Number);if(2===r.length)return[r[0],r[1]];throw new ArgumentError(gmlToEsriParseError)}function _parseGmlCoords(e){if(checkArg("geometry",e).isNotMissing(),"LineString"!==e.localName&&"LinearRing"!==e.localName&&"LineStringSegment"!==e.localName)throw new ArgumentError(gmlToEsriParseError);const r=e.getElementsByTagNameNS(e.namespaceURI,"coordinates"),t=e.getElementsByTagNameNS(e.namespaceURI,"posList");if(r.length>0&&r[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseCoordsFromString(r[0].childNodes[0].data)}if(t.length>0&&t[0].childNodes[0].nodeType===Node.TEXT_NODE){return _parseCoordsFromString(t[0].childNodes[0].data)}throw new ArgumentError(gmlToEsriParseError)}function _parseCoordsFromString(e){const r=e.replace(/,/g,"").split(" ").map(Number),t=new Array;for(let e=0;e<r.length;e+=2){if(void 0===r[e+1])throw new ArgumentError(gmlToEsriParseError);t.push([r[e],r[e+1]])}if(t.length>0)return t;throw new ArgumentError(gmlToEsriParseError)}function _getEsriSpatialReference(e){return checkArg("geometry",e).isNotMissing(),e.hasAttribute("srsName")?ogcSrsToEsriSr(e.getAttribute("srsName")):SpatialReference.WebMercator}function _createGmlPointElement(e,r){const t=getGmlNS(r.gmlVersion),n=_createElementWithNS(t,"Point","gml");let o,i;_applySrsAttributes(n,_getSrsName(e,r),r.hasOwnProperty("srsDimension")?r.srsDimension:void 0),"2.0"===r.gmlVersion||"3.0"===r.gmlVersion?(o=_createElementWithNS(t,"coordinates","gml"),i=_esriPointToString(", ",e)):(o=_createElementWithNS(t,"pos","gml"),i=_esriPointToString(" ",e)),n.appendChild(o);const s=_createTextNode(i);return o.appendChild(s),n}function _createGmlLineStringElement(e,r){const t=getGmlNS(r.gmlVersion),n=_createElementWithNS(t,"LineString","gml");let o,i;_applySrsAttributes(n,_getSrsName(e,r),r.hasOwnProperty("srsDimension")?r.srsDimension:void 0),"2.0"===r.gmlVersion||"3.0"===r.gmlVersion?(o=_createElementWithNS(t,"coordinates","gml"),i=_esriPolylineToString(", ",e)):(o=_createElementWithNS(t,"posList","gml"),i=_esriPolylineToString(" ",e)),n.appendChild(o);const s=_createTextNode(i);return o.appendChild(s),n}function _createGmlPolygonElement(e,r){const t=getGmlNS(r.gmlVersion),n=_createElementWithNS(t,"Polygon","gml");_applySrsAttributes(n,_getSrsName(e,r),r.hasOwnProperty("srsDimension")?r.srsDimension:void 0);const o="2.0"===r.gmlVersion?_createElementWithNS(t,"outerBoundaryIs","gml"):_createElementWithNS(t,"exterior","gml");n.appendChild(o);const i=_createElementWithNS(t,"LinearRing","gml");let s,a;o.appendChild(i),"2.0"===r.gmlVersion||"3.0"===r.gmlVersion?(s=_createElementWithNS(t,"coordinates","gml"),a=_esriPolygonToString(", ",e)):(s=_createElementWithNS(t,"posList","gml"),a=_esriPolygonToString(" ",e)),i.appendChild(s);const c=_createTextNode(a);return s.appendChild(c),n}function _getSrsName(e,r){if(r.hasOwnProperty("srsName"))return r.srsName;if(void 0!==e.spatialReference.wkid&&null!==e.spatialReference.wkid){if(e.spatialReference.wkid<32767)return`EPSG:${e.spatialReference.wkid}`;if(102100===e.spatialReference.wkid||900913===e.spatialReference.wkid||102113===e.spatialReference.wkid)return"EPSG:3857"}throw new ArgumentError("Unable to convert Esri WKT spatial reference to an OGC spatial reference")}function _applySrsAttributes(e,r,t){if(null!=r&&(e.setAttribute("srsName",r),null!=t)){const r=t<1?2:t;e.setAttribute("srsDimension",r.toString())}}function _createElementWithNS(e,r,t){checkArg("namespace",e).isNotMissing(),checkArg("name",r).isNotMissing();return document.implementation.createDocument(void 0,"temp",void 0).createElementNS(e,t?`${t}:${r}`:r)}function _createTextNode(e){return document.implementation.createDocument(void 0,"temp",void 0).createTextNode(e)}function _esriPointToString(e,r){const t=r;return" "===e?`${t.x} ${t.y}`:`${t.x}, ${t.y}`}function _esriPolylineToString(e,r){return r.paths[0].map((r=>r.join(e))).join(" ")}function _esriPolygonToString(e,r){let t;if(isPolygon(r))t=r.rings[0];else if(isExtent(r)){const{xmin:e,xmax:n,ymin:o,ymax:i}=r;t=[[e,i],[n,i],[n,o],[e,o],[e,i]]}return t.map((r=>r.join(e))).join(" ")}function getGeometryServiceUrl(){var e,r,t;return null!==(t=null!==(e=config.geometryServiceUrl)&&void 0!==e?e:null===(r=config._geometryService)||void 0===r?void 0:r.url)&&void 0!==t?t:DEFAULT_GEOMETRY_SERVICE_URL}export function isGeometry(e){return isPoint(e)||isMultipoint(e)||isPolyline(e)||isPolygon(e)||isExtent(e)||isMesh(e)}export function isPoint(e){return isEsriObject(e)&&"point"===(null==e?void 0:e.type)}export function isMultipoint(e){return isEsriObject(e)&&"multipoint"===(null==e?void 0:e.type)}export function isPolyline(e){return isEsriObject(e)&&"polyline"===(null==e?void 0:e.type)}export function isPolygon(e){return isEsriObject(e)&&"polygon"===(null==e?void 0:e.type)}export function isExtent(e){return isEsriObject(e)&&"extent"===(null==e?void 0:e.type)}export function isMesh(e){return isEsriObject(e)&&"mesh"===(null==e?void 0:e.type)}
|
package/version.d.ts
CHANGED
package/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version="
|
|
1
|
+
export const version="34.0.1";
|