UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 5.68 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{toStringEnumKey as e}from"../enum.js";import{ArcadeExecutionError as r,ExecutionErrorCodes as a}from"../executionError.js";import{linearUnitLookup as s,angularUnitLookup as t,areaUnitLookup as n,linearUnitToAreaUnit as c}from"./extendedUnitData.js";export{meters,squareMeters}from"./extendedUnitData.js";import{findSpatialReferenceUnitFromWkt as u}from"./wkt.js";import"../../core/has.js";import{gradGcsIds as i}from"../../core/unitUtils.js";import l from"../../geometry/support/WKIDUnitConversion.js";const o=-1;function m(e,r){let a;switch(e){case"linear":a=s;break;case"angular":a=t;break;case"area":a=n;break;default:return null}return a.get(r)}function f(e){const r=e.wkid;if(null!=r){const e=l.units[l[r]];if(null!=e)switch(e){case"Meter":return m("linear",9001);case"Foot":return m("linear",9002);case"Foot_US":return m("linear",9003);case"Foot_Clarke":return m("linear",9005);case"Yard_Clarke":return m("linear",9037);case"Link_Clarke":return m("linear",9039);case"Yard_Sears":return m("linear",9040);case"Foot_Sears":return m("linear",9041);case"Chain_Sears":return m("linear",9042);case"Chain_Benoit_1895_B":return m("linear",9062);case"Yard_Indian":return m("linear",9084);case"Yard_Indian_1937":return m("linear",9085);case"Foot_Gold_Coast":return m("linear",9094);case"Chain":return m("linear",9097);case"Chain_Sears_1922_Truncated":return m("linear",9301);case"50_Kilometers":return m("linear",109030);case"150_Kilometers":return m("linear",109031);default:throw new Error(`Unknown unit name: ${e}`)}return i.has(r)?m("angular",9105):m("angular",9102)}const a=e.wkt2||e.wkt;if(null!=a){const e=u(a);if(null!=e){if(null!=e.wkid){const r=m(e.type,e.wkid);if(null!=r)return r}return{type:e.type,wkid:o,factor:e.factor}}}return null}function q(e){if("linear"!==e.type)return null;if(e.wkid===o)return{type:"area",wkid:o,factor:e.factor**2};const r=c.get(e.wkid);return null==r?null:m("area",r)}function d(c){if(null!=c){if("number"==typeof c)return n.get(c)??s.get(c)??t.get(c);if("string"!=typeof c)throw new r(null,a.InvalidParameter,null);switch(e(c)){case"meters":case"meter":case"m":case"squaremeters":case"squaremeter":return n.get(109404);case"miles":case"mile":case"squaremile":case"squaremiles":return n.get(109439);case"kilometers":case"kilometer":case"squarekilometers":case"squarekilometer":case"km":return n.get(109414);case"acres":case"acre":case"ac":return n.get(109402);case"hectares":case"hectare":case"ha":return n.get(109401);case"yard":case"yd":case"yards":case"squareyards":case"squareyard":return n.get(109442);case"feet":case"ft":case"foot":case"squarefeet":case"squarefoot":return n.get(109405);case"nmi":case"nauticalmile":case"nauticalmiles":case"squarenauticalmile":case"squarenauticalmiles":return n.get(109409);case"millimeter":case"millimeters":case"squaremillimeter":case"squaremillimeters":return n.get(109452);case"centimeter":case"centimeters":case"squarecentimeter":case"squarecentimeters":return n.get(109451);case"decimeter":case"decimeters":case"squaredecimeter":case"squaredecimeters":return n.get(109450);case"inch":case"inches":case"squareinch":case"squareinches":return n.get(109453);case"usfoot":case"usfeet":case"squareusfoot":case"squareusfeet":return n.get(109406);case"usmile":case"usmiles":case"squareusmile":case"squareusmiles":return n.get(109413)}}}function g(c){if(null!=c){if("number"==typeof c)return s.get(c)??t.get(c)??n.get(c);if("string"!=typeof c)throw new r(null,a.InvalidParameter,null);switch(e(c)){case"meters":case"meter":case"m":case"squaremeters":case"squaremeter":case"hectares":case"hectare":case"ha":return s.get(9001);case"miles":case"mile":case"squaremile":case"squaremiles":return s.get(9093);case"kilometers":case"kilometer":case"squarekilometers":case"squarekilometer":case"km":return s.get(9036);case"yard":case"yd":case"yards":case"squareyards":case"squareyard":case"acres":case"acre":case"ac":return s.get(9096);case"feet":case"ft":case"foot":case"squarefeet":case"squarefoot":return s.get(9002);case"nmi":case"nauticalmile":case"nauticalmiles":case"squarenauticalmile":case"squarenauticalmiles":return s.get(9030);case"millimeter":case"millimeters":case"squaremillimeter":case"squaremillimeters":return s.get(109007);case"centimeter":case"centimeters":case"squarecentimeter":case"squarecentimeters":return s.get(109006);case"decimeter":case"decimeters":case"squaredecimeter":case"squaredecimeters":return s.get(109005);case"inch":case"inches":case"squareinch":case"squareinches":return s.get(109008);case"usfoot":case"usfeet":case"squareusfoot":case"squareusfeet":return s.get(9003);case"usmile":case"usmiles":case"squareusmile":case"squareusmiles":return s.get(9035)}}}function p(e,r,a){if(e.type!==r.type)throw new Error(`Incompatible unit types. src=${e.type} dest=${r.type}`);return a*(e.factor/r.factor)}function w(e,r,a){if(null==e||null==r)return a;const s=f(e);if(null==s)throw new Error("Unknown spatial reference unit.");const t="area"===r.type&&"linear"===s.type?q(s):s;if(null==t)throw new Error(`Unknown spatial reference ${r.type} unit.`);return p(t,r,a)}function h(e,r,a){if(null==e||null==r)return a;const s=f(r);if(null==s)throw new Error("Unknown spatial reference unit.");const t="area"===e.type&&"linear"===s.type?q(s):s;if(null==t)throw new Error(`Unknown spatial reference ${e.type} unit.`);return p(e,t,a)}function k(e,r,a){return null==e||null==r?a:p(e,r,a)}export{k as convert,w as convertFromSpatialReferenceUnit,h as convertToSpatialReferenceUnit,f as getSpatialReferenceUnit,d as toAreaUnit,g as toLengthUnit};