UNPKG

@arcgis/core

Version:

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

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