ScaleBarViewModel.js 3.4 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{_ as e}from"../../chunks/tslib.es6.js";import"../../geometry.js";import t from"../../core/Accessor.js";import{isNone as r}from"../../core/maybe.js";import{createScreenPoint as s}from"../../core/screenUtils.js";import{property as i}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/accessorSupport/ensureType.js";import{subclass as o}from"../../core/accessorSupport/decorators/subclass.js";import{isSupported as n,geodesicLengths as a}from"../../geometry/support/geodesicUtils.js";import{straightLineDensify as c}from"../../geometry/support/normalizeUtils.js";import{getInfo as m}from"../../geometry/support/spatialReferenceUtils.js";import{webMercatorToGeographic as l}from"../../geometry/support/webMercatorUtils.js";import p from"../../geometry/support/WKIDUnitConversion.js";import u from"../../geometry/SpatialReference.js";import d from"../../geometry/Polyline.js";import f from"../../geometry/Point.js";function g(e){const{wkid:t}=e;if(null!=p[t])return p.values[p[t]];const{wkt:r}=e,s=r.lastIndexOf(",")+1,i=r.lastIndexOf("]]");return parseFloat(r.substring(s,i))}function has(e,t){return e&&e.includes(t)}function h(e,t){const{x:r,y:s}="decimal-degrees"===e?l(t,!0):t;return[r,s]}function w({state:{paddedViewState:e},spatialReference:t,width:r}){return t.isWrappable&&e.worldScreenWidth<r}let y=class extends t{constructor(e){super(e),this.scaleComputedFrom=s(),this.view=null}get state(){return this.get("view.ready")&&"2d"===this.get("view.type")?"ready":"disabled"}getScaleBarProperties(e,t){if("disabled"===this.state||isNaN(e)||!t)return null;const s=this._getDistanceInKm(this.view,this.scaleComputedFrom);if(r(s))return null;if("metric"===t)return this._getScaleBarProps(e,s,"metric");const i=s/1.609;return this._getScaleBarProps(e,i,"non-metric")}_getLocationUnit(){const e=this.get("view.spatialReference"),{isWebMercator:t,wkid:r,wkt:s}=e;return t||has(s,"WGS_1984_Web_Mercator")?"decimal-degrees":null!=p[r]||has(s,"PROJCS")?"linear-unit":"unknown"}_getDistanceInKm(e,t){const{state:r,spatialReference:s}=e,i=this._getLocationUnit();if("linear-unit"===i){const e=1e3;return r.extent.width*g(s)/e}const[o,m]=this._getScaleMeasuringPoints(e,t),l="decimal-degrees"===i||s.isGeographic&&!n(s)?u.WGS84:s,p=new d({paths:[[h(i,o),h(i,m)]],spatialReference:l}),f=c(p,10);let w;try{[w]=a([f],"kilometers")}catch{return null}return w}_getScaleMeasuringPoints(e,t){const{width:r,height:i,position:o,spatialReference:n}=e;if(w(e)){const{valid:e}=m(n);return[new f(e[0],0,n),new f(e[1],0,n)]}let a=t.y-o[1];a>i?a=i:a<0&&(a=0);const c=s(0,a),l=s(r,a);return[e.toMap(c),e.toMap(l)]}_getScaleBarProps(e,t,r){const{view:s}=this;let i=e*t/(w(s)?s.state.paddedViewState.worldScreenWidth:s.width),o="metric"===r?"km":"mi";if(i<.1)if("mi"===o){i*=5280,o="ft"}else if("km"===o){i*=1e3,o="m"}let n=0;for(;i>=1;)i/=10,n++;const a=this._getConstraints(i);if(!a)return null;const{min:c,max:m}=a,l=m/i>=i/c?c:m;return{length:e*(l/i),value:10**n*l,unit:o}}_getConstraints(e){return e>.5?{min:.5,max:1}:e>.3?{min:.3,max:.5}:e>.2?{min:.2,max:.3}:e>.15?{min:.15,max:.2}:e>=.1?{min:.15,max:.1}:void 0}};e([i()],y.prototype,"scaleComputedFrom",void 0),e([i({readOnly:!0})],y.prototype,"state",null),e([i()],y.prototype,"view",void 0),y=e([o("esri.widgets.Scalebar.ScaleBarViewModel")],y);const S=y;export{S as default};