UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 2.76 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{_ as e}from"../chunks/tslib.es6.js";import{convertUnit as r,isProjectedWKT as t,getMetersPerUnit as s,lengthToDegrees as i}from"../core/unitUtils.js";import{property as o}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/Logger.js";import"../core/RandomLCG.js";import{subclass as c}from"../core/accessorSupport/decorators/subclass.js";import{getReferenceEllipsoid as a}from"./ellipsoidUtils.js";import n from"./Point.js";import p from"./Polygon.js";import l from"./SpatialReference.js";import{directGeodeticSolver as d}from"./support/geodesicUtils.js";import{webMercatorToGeographic as h,geographicToWebMercator as u}from"./support/webMercatorUtils.js";import m from"./support/WKIDUnitConversion.js";var f;let g=f=class extends p{constructor(e){super(e),this.center=null,this.geodesic=!1,this.numberOfPoints=60,this.radius=1e3,this.radiusUnit="meters"}initialize(){const e=this.center,o=this.numberOfPoints;if(this.hasZ=e?.hasZ??!1,0!==this.rings.length||!e)return;const c=r(this.radius,this.radiusUnit,"meters"),n=e.spatialReference;let p,l="geographic";if(n.isWebMercator?l="webMercator":(null!=(n.wkid&&m[n.wkid])||(n.wkt2||n.wkt)&&t(n.wkt2||n.wkt))&&(l="projected"),this.geodesic){let r;switch(l){case"webMercator":r=h(e);break;case"projected":console.error("Creating a geodesic circle requires the center to be specified in web mercator or geographic coordinate system");break;case"geographic":r=e}p=this._createGeodesicCircle(r,c,o),"webMercator"===l&&(p=u(p))}else{let r;"webMercator"===l||"projected"===l?r=c/s(e.spatialReference):"geographic"===l&&(r=i(c,"meters",a(e.spatialReference).radius)),p=this._createPlanarCircle(e,r,o)}this.spatialReference=p.spatialReference,this.addRing(p.rings[0])}clone(){const{center:e,numberOfPoints:r,radius:t,radiusUnit:s,geodesic:i}=this;return new f({center:e?.clone(),numberOfPoints:r,radius:t,radiusUnit:s,geodesic:i})}_createGeodesicCircle(e,r,t){const s=[],i=[e.x,e.y];for(let o=0;o<360;o+=360/t){const t=this.hasZ?[0,0,e.z??0]:[0,0];d(t,i,o,r,l.WGS84),s.push(t)}return s.push(s[0]),new p({rings:[s]})}_createPlanarCircle(e,r,t){const s=[],i=2*Math.PI/t;for(let o=0;o<t;++o){const t=i*o,c=[e.x+Math.cos(-t)*r,e.y+Math.sin(-t)*r];this.hasZ&&c.push(e.z??0),s.push(c)}return s.push(s[0]),new p({spatialReference:e.spatialReference,rings:[s]})}};e([o({type:n})],g.prototype,"center",void 0),e([o()],g.prototype,"geodesic",void 0),e([o()],g.prototype,"numberOfPoints",void 0),e([o()],g.prototype,"radius",void 0),e([o()],g.prototype,"radiusUnit",void 0),g=f=e([c("esri.geometry.Circle")],g);const b=g;export{b as default};