12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.24/esri/copyright.txt for details.
- */
- import e from"../Dictionary.js";import{h as t,b as r,a as n,f as s,l as a,n as i}from"../../chunks/languageUtils.js";const c=e=>(t,r,n)=>(n=n||14,+e(t,r).toFixed(n)),o=(e,t)=>e+t,d=(e,t)=>e-t,u=(e,t)=>e*t,m=(e,t)=>e/t,l=(e,t,r)=>c(o)(e,t,r),h=(e,t,r)=>c(d)(e,t,r),g=(e,t,r)=>c(u)(e,t,r),_=(e,t,r)=>c(m)(e,t,r),f=360,w=400,A=2*Math.PI,D=3600,E=3240,p=60,T=60,S=180*D/Math.PI,R=f*p*T,M=90*D,U=180*D,v=270*D,F=String.fromCharCode(7501),I="°";function N(e){if(!1===r(e))throw new Error("Invalid Parameter");return e}function x(e,t){const r=10**t;return Math.round(e*r)/r}function z(e,t){return e%t}function O(e){const t=parseFloat(e.toString().replace(Math.trunc(e).toString(),"0"))*Math.sign(e);if(e<0){return{fraction:t,integer:Math.ceil(e)}}return{fraction:t,integer:Math.floor(e)}}var G,b,H,C;function y(e,t){switch(e){case G.north:return"SHORT"===t?"N":"North";case G.east:return"SHORT"===t?"E":"East";case G.south:return"SHORT"===t?"S":"South";case G.west:return"SHORT"===t?"W":"West"}}function q(e,t,r){for(;e.length<r;)e=t+e;return e}function P(e,t){return e-Math.floor(e/t)*t}function k(e){switch(e){case b.truncated_degrees:case b.decimal_degrees:return f;case b.radians:return A;case b.gradians:return w;case b.seconds:return R;case b.fractional_degree_minutes:return p;case b.fractional_minute_seconds:return T;default:throw new Error("Unnexpected evaluations")}}function L(e){switch(e.toUpperCase().trim()){case"NORTH":case"NORTHAZIMUTH":case"NORTH AZIMUTH":return H.north_azimuth;case"POLAR":return H.polar;case"QUADRANT":return H.quadrant;case"SOUTH":case"SOUTHAZIMUTH":case"SOUTH AZIMUTH":return H.south_azimuth}throw new Error("Unsupported direction type")}function Q(e){switch(e.toUpperCase().trim()){case"D":case"DD":case"DECIMALDEGREE":case"DECIMAL DEGREE":case"DEGREE":case"DECIMALDEGREES":case"DECIMAL DEGREES":case"DEGREES":return b.decimal_degrees;case"DMS":case"DEGREESMINUTESSECONDS":case"DEGREES MINUTES SECONDS":return b.degrees_minutes_seconds;case"R":case"RAD":case"RADS":case"RADIAN":case"RADIANS":return b.radians;case"G":case"GON":case"GONS":case"GRAD":case"GRADS":case"GRADIAN":case"GRADIANS":return b.gradians}throw new Error("Unsupported units")}!function(e){e[e.north=0]="north",e[e.east=1]="east",e[e.south=2]="south",e[e.west=3]="west"}(G||(G={})),function(e){e[e.decimal_degrees=1]="decimal_degrees",e[e.seconds=2]="seconds",e[e.degrees_minutes_seconds=3]="degrees_minutes_seconds",e[e.radians=4]="radians",e[e.gradians=5]="gradians",e[e.truncated_degrees=6]="truncated_degrees",e[e.fractional_degree_minutes=7]="fractional_degree_minutes",e[e.fractional_minute_seconds=8]="fractional_minute_seconds"}(b||(b={})),function(e){e[e.north_azimuth=1]="north_azimuth",e[e.polar=2]="polar",e[e.quadrant=3]="quadrant",e[e.south_azimuth=4]="south_azimuth"}(H||(H={})),function(e){e[e.meridian=0]="meridian",e[e.direction=1]="direction"}(C||(C={}));class W{constructor(e,t,r){this.m_degrees=e,this.m_minutes=t,this.m_seconds=r}getField(e){switch(e){case b.decimal_degrees:case b.truncated_degrees:return this.m_degrees;case b.fractional_degree_minutes:return this.m_minutes;case b.seconds:case b.fractional_minute_seconds:return this.m_seconds;default:throw new Error("Unnexpected evaluation")}}static secondsToDMS(e){const t=O(e).fraction;let r=O(e).integer;const n=Math.floor(r/D);r-=n*D;const s=Math.floor(r/T);return r-=s*T,new W(n,s,r+t)}static numberToDms(e){const t=O(e).fraction,r=O(e).integer,n=g(O(100*t).fraction,100),s=O(100*t).integer;return new W(r,s,n)}format(e,t){let r=x(this.m_seconds,t),n=this.m_minutes,s=this.m_degrees;if(e===b.seconds||e===b.fractional_minute_seconds)T<=r&&(r-=T,++n),p<=n&&(n=0,++s),f<=s&&(s=0);else if(e===b.fractional_degree_minutes)r=0,n=30<=this.m_seconds?this.m_minutes+1:this.m_minutes,s=this.m_degrees,p<=n&&(n=0,++s),f<=s&&(s=0);else if(e===b.decimal_degrees||e===b.truncated_degrees){const e=_(this.m_seconds,D),t=_(this.m_minutes,p);s=Math.round(this.m_degrees+t+e),n=0,r=0}return new W(s,n,r)}static dmsToSeconds(e,t,r){return e*D+t*T+r}}class Z{constructor(e,t,r){this.meridian=e,this.angle=t,this.direction=r}fetchAzimuth(e){return e===C.meridian?this.meridian:this.direction}}class B{constructor(e){this.m_angle=e}static createFromAngleAndDirection(e,t){return new B(new V(B._convertDirectionFormat(e.extractAngularUnits(b.seconds),t,H.north_azimuth)))}getAngle(e){const t=this.m_angle.extractAngularUnits(b.seconds);switch(e){case H.north_azimuth:case H.south_azimuth:case H.polar:return new V(B._convertDirectionFormat(t,H.north_azimuth,e));case H.quadrant:{const e=B.secondsNorthAzimuthToQuadrant(t);return new V(e.angle)}}}getMeridian(e){const t=this.m_angle.extractAngularUnits(b.seconds);switch(e){case H.north_azimuth:return G.north;case H.south_azimuth:return G.south;case H.polar:return G.east;case H.quadrant:return B.secondsNorthAzimuthToQuadrant(t).meridian}}getDirection(e){const t=this.m_angle.extractAngularUnits(b.seconds);switch(e){case H.north_azimuth:return G.east;case H.south_azimuth:return G.west;case H.polar:return G.north;case H.quadrant:return B.secondsNorthAzimuthToQuadrant(t).direction}}static secondsNorthAzimuthToQuadrant(e){const t=e<=M||e>=v?G.north:G.south,r=t===G.north?Math.min(R-e,e):Math.abs(e-U),n=e>U?G.west:G.east;return new Z(t,r,n)}static createFromAngleMeridianAndDirection(e,t,r){return new B(new V(B.secondsQuadrantToNorthAzimuth(e.extractAngularUnits(b.seconds),t,r)))}static secondsQuadrantToNorthAzimuth(e,t,r){return t===G.north?r===G.east?e:R-e:r===G.east?U-e:U+e}static _convertDirectionFormat(e,t,r){let n=0;switch(t){case H.north_azimuth:n=e;break;case H.polar:n=M-e;break;case H.quadrant:throw new Error("Unnexpected evaluation");case H.south_azimuth:n=e+U}let s=0;switch(r){case H.north_azimuth:s=n;break;case H.polar:s=M-n;break;case H.quadrant:throw new Error("Unnexpected evaluation");case H.south_azimuth:s=n-U}return s=z(s,R),s<0?R+s:s}}function j(e,t,r){let n=null;switch(t){case b.decimal_degrees:n=g(e,D);break;case b.seconds:n=e;break;case b.gradians:n=g(e,E);break;case b.radians:n=g(e,S);break;default:throw new Error("Unnexpected evaluation")}switch(r){case b.decimal_degrees:return _(n,D);case b.seconds:return n;case b.gradians:return _(n,E);case b.radians:return n/S;default:throw new Error("Unnexpected evaluation")}}class V{constructor(e){this.m_seconds=e}static createFromAngleAndUnits(e,t){return new V(j(e,t,b.seconds))}extractAngularUnits(e){return j(this.m_seconds,b.seconds,X(e))}static createFromDegreesMinutesSeconds(e,t,r){return new V(l(l(g(e,D),g(t,T)),r))}}function X(e){switch(e){case b.decimal_degrees:case b.truncated_degrees:case b.degrees_minutes_seconds:return b.decimal_degrees;case b.gradians:return b.gradians;case b.fractional_degree_minutes:return b.fractional_degree_minutes;case b.radians:return b.radians;case b.seconds:case b.fractional_minute_seconds:return b.seconds}}class J{constructor(e,t,r,n){this.m_view=e,this.m_angle=t,this.m_merdian=r,this.m_direction=n,this.m_dms=null,this.m_formatted_dms=null}static createFromStringAndBearing(e,t,r){return new J(e,t.getAngle(r),t.getMeridian(r),t.getDirection(r))}fetchAngle(){return this.m_angle}fetchMeridian(){return this.m_merdian}fetchDirection(){return this.m_direction}fetchView(){return this.m_view}fetchDms(){return null===this.m_dms&&this._calculateDms(),this.m_dms}fetchFormattedDms(){return null===this.m_formatted_dms&&this._calculateDms(),this.m_formatted_dms}_calculateDms(){let e=null,t=b.truncated_degrees,r=0;for(let n=0;n<this.m_view.length;n++){const s=this.m_view[n];switch(s){case"m":e=oe(this.m_view,n,s),t=t===b.truncated_degrees?b.fractional_degree_minutes:t,n=e.newpos;continue;case"s":e=oe(this.m_view,n,s),t=b.fractional_minute_seconds,r=r<e.rounding?e.rounding:r,n=e.newpos;continue;default:continue}}this.m_dms=W.secondsToDMS(this.m_angle.extractAngularUnits(b.seconds)),this.m_formatted_dms=W.secondsToDMS(this.m_angle.extractAngularUnits(b.seconds)).format(t,r)}}function K(e,t,r,n,s){let a=null;switch(t){case b.decimal_degrees:case b.radians:case b.gradians:return a=P(x(e.extractAngularUnits(t),n),k(t)),q(a.toFixed(n),"0",r+n+(n>0?1:0));case b.truncated_degrees:case b.fractional_degree_minutes:return a=P(s.fetchFormattedDms().getField(t),k(t)),q(a.toFixed(n),"0",r+n+(n>0?1:0));case b.fractional_minute_seconds:return a=P(x(s.fetchDms().getField(t),n),k(t)),q(a.toFixed(n),"0",r+n+(n>0?1:0));default:throw new Error("Unnexepected evaluation")}}function Y(e,t,r){if(r===H.quadrant)throw new Error("Conversion error");if(t===b.degrees_minutes_seconds){const t=W.numberToDms(e);return B.createFromAngleAndDirection(V.createFromDegreesMinutesSeconds(t.m_degrees,t.m_minutes,t.m_seconds),r)}return B.createFromAngleAndDirection(V.createFromAngleAndUnits(e,X(t)),r)}function $(e){switch(s(e)){case 1:return{first:G.north,second:G.east};case 2:return{first:G.south,second:G.east};case 3:return{first:G.south,second:G.west};case 4:return{first:G.north,second:G.west}}return null}function ee(e){switch(e.toUpperCase().trim()){case"N":case"NORTH":return G.north;case"E":case"EAST":return G.east;case"S":case"SOUTH":return G.south;case"W":case"WEST":return G.west}return null}function te(e){const t=parseFloat(e);if(n(t)){if(isNaN(t))throw new Error("Invalid conversion");return t}throw new Error("Invalid conversion")}function re(e,r,n){const s=n===H.quadrant;let a=null,i=null,c=0,o=0,d=0;if(s){if(e.length<2)throw new Error("Conversion Error");d=1;const r=$(t(e[e.length-1]));if(r?(a=r.first,i=r.second):(c=1,a=ee(t(e[0])),i=ee(t(e[e.length-1]))),null===a||null===i)throw new Error("Invalid Conversion")}switch(r){case b.decimal_degrees:case b.radians:case b.gradians:if(0===e.length)throw new Error("Invalid Conversion");return s?B.createFromAngleMeridianAndDirection(V.createFromAngleAndUnits(te(e[c]),X(r)),a,i):B.createFromAngleAndDirection(V.createFromAngleAndUnits(te(e[c]),X(r)),n);case b.degrees_minutes_seconds:if(o=e.length-d-c,3===o){const t=V.createFromDegreesMinutesSeconds(te(e[c]),te(e[c+1]),te(e[c+2]));return s?B.createFromAngleMeridianAndDirection(t,a,i):B.createFromAngleAndDirection(t,n)}if(1===o){const t=te(e[c]),r=W.numberToDms(t),o=V.createFromDegreesMinutesSeconds(r.m_degrees,r.m_minutes,r.m_seconds);return s?B.createFromAngleMeridianAndDirection(o,a,i):B.createFromAngleAndDirection(o,n)}}throw new Error("Conversion Error")}function ne(e){const t=[" ","-","/","'",'"',"\\","^",I,F,"\t","\r","\n","*"];let r="";for(let n=0;n<e.length;n++){const s=e.charAt(n);t.includes(s)?r+="RRSPLITRRSPLITRR":r+=s}return r.split("RRSPLITRRSPLITRR").filter((e=>""!==e))}function se(e,t,c){if(n(e))return Y(s(e),t,c);if(r(e))return re(ne(e),t,c);if(a(e))return re(e,t,c);if(i(e))return re(e.toArray(),t,c);throw new Error("Conversion Error")}function ae(e,t,r){const n=X(r);if(n&&r!==b.degrees_minutes_seconds){return e.getAngle(t).extractAngularUnits(n)}throw new Error("Conversion Error")}function ie(e,t,r){const n=e.getAngle(t);if(t===H.quadrant&&r===b.degrees_minutes_seconds){const r=W.secondsToDMS(n.extractAngularUnits(b.seconds));return[y(e.getMeridian(t),"SHORT"),r.m_degrees,r.m_minutes,r.m_seconds,y(e.getDirection(t),"SHORT")]}if(r===b.degrees_minutes_seconds){const e=W.secondsToDMS(n.extractAngularUnits(b.seconds));return[e.m_degrees,e.m_minutes,e.m_seconds]}return t===H.quadrant?[y(e.getMeridian(t),"SHORT"),n.extractAngularUnits(r),y(e.getDirection(t),"SHORT")]:[n.extractAngularUnits(r)]}function ce(e,t){let r="";switch(e){case b.decimal_degrees:r=t===H.quadrant?"DD.DD"+I:"DDD.DD"+I;break;case b.degrees_minutes_seconds:r=t===H.quadrant?"dd"+I+" mm' ss\"":"ddd"+I+" mm' ss.ss\"";break;case b.radians:r="R.RR";break;case b.gradians:r="GGG.GG"+F;break;default:throw new Error("Conversion error")}return t===H.quadrant&&(r="p "+r+" b"),r}function oe(e,t,r){const n={padding:0,rounding:0,newpos:t};let s=!1;for(;t<e.length;){const a=e[t];if(a===r)s?n.rounding++:n.padding++,t++;else{if("."!==a)break;s=!0,t++}}return n.newpos=t-1,n}function de(e,t,r){const n={escaped:"",newpos:t};for(t++;t<e.length;){const r=e[t];if(t++,"]"===r)break;n.escaped+=r}return n.newpos=t-1,n}function ue(e,t,r){let n="",s=null,a=null;const i=J.createFromStringAndBearing(t,e,r),c={D:b.decimal_degrees,d:b.truncated_degrees,m:b.fractional_degree_minutes,s:b.fractional_minute_seconds,R:b.radians,G:b.gradians};for(let o=0;o<t.length;o++){const d=t[o];switch(d){case"[":s=de(t,o),n+=s.escaped,o=s.newpos;continue;case"D":case"d":case"m":case"s":case"R":case"G":s=oe(t,o,d),a=e.getAngle(r),n+=K(a,c[d],s.padding,s.rounding,i),o=s.newpos;continue;case"P":case"p":n+=y(i.fetchMeridian(),"p"===d?"SHORT":"LONG");continue;case"B":case"b":n+=y(i.fetchDirection(),"b"===d?"SHORT":"LONG");continue;default:n+=d}}return n}function me(r,n,s){if(!(n instanceof e))throw new Error("Invalid Parameter");if(!1===n.hasField("directionType"))throw new Error("Invalid Parameter - Missing directionType");if(!1===n.hasField("angleType"))throw new Error("Invalid Parameter - Missing directionType");const a=L(N(n.field("directiontype"))),i=se(r,Q(N(n.field("angletype"))),a);if(!(s instanceof e))throw new Error("Invalid Parameter");if(!1===s.hasField("directionType"))throw new Error("Invalid Parameter - Missing directionType");if(!1===s.hasField("outputType"))throw new Error("Invalid Parameter - Missing directionType");const c=L(N(s.field("directiontype"))),o=s.hasField("angleType")?Q(N(s.field("angletype"))):null,d=N(s.field("outputType")).toUpperCase().trim();if(!c||!d)throw new Error("Conversion error");if(!(o||"TEXT"===d&&s.hasField("format")))throw new Error("Invalid unit");switch(d){case"VALUE":return c===H.quadrant||o===b.degrees_minutes_seconds?ie(i,c,o):ae(i,c,o);case"TEXT":{let e="";return s.hasField("format")&&(e=t(s.field("format"))),null!==e&&""!==e||(e=ce(o,c)),ue(i,e,c)}default:throw new Error("Invalid Parameter")}}export{me as convertDirection,l as preciseAdd,_ as preciseDivide,h as preciseMinus,g as preciseMultiply};
|