@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.52 kB
JavaScript
import has from"../../../core/has.js";import{create as t}from"../../../geometry/support/aaBoundingRect.js";import{getBoundsXY as e}from"../../../geometry/support/boundsUtils.js";import{weightedAreaCentroid as s}from"../../../geometry/support/centroid.js";import{getPolylabelPoint as n,getLabelPoint as o}from"../../../geometry/support/labelPoint.js";import{Placement as r}from"../CIMPlacements.js";import{PlacementPolygonCenterMethod as i}from"../enums.js";function l(t){return void 0!==t.rings}class a{static local(){return null===a.instance&&(a.instance=new a),a.instance}execute(t,e,s,n,o){return new f(t,e,s)}}a.instance=null;class f{constructor(t,e,s){this._geometry=t,this._offsetX=void 0!==e.offsetX?e.offsetX*s:0,this._offsetY=void 0!==e.offsetY?e.offsetY*s:0,this._method=void 0!==e.method?e.method:i.OnPolygon,this._internalPlacement=new r}next(){const t=this._geometry;return this._geometry=null,t&&l(t)?this._polygonCenter(t):null}_polygonCenter(r){let l=!1;switch(this._method){case i.CenterOfMass:{const t=s(r);t&&(this._internalPlacement.setTranslate(t[0]+this._offsetX,t[1]+this._offsetY),l=!0)}break;case i.BoundingBoxCenter:{const s=t();e(s,r),s&&(this._internalPlacement.setTranslate((s[2]+s[0])/2+this._offsetX,(s[3]+s[1])/2+this._offsetY),l=!0)}break;case i.OnPolygon:default:{let t;t=has("polylabel-placement-enabled")?n(r):o(r),null!==t&&(this._internalPlacement.setTranslate(t[0]+this._offsetX,t[1]+this._offsetY),l=!0)}}return l?this._internalPlacement:null}}export{a as PlacementPolygonCenter};