UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.31 kB
import{isSome as t}from"../../../core/maybe.js";import{getInfo as r}from"../../../geometry/support/spatialReferenceUtils.js";import o from"./TileKey.js";function i(t,r){return[t,r]}function e(t,r,o){return t[0]=r,t[1]=o,t}function s(t,r,o,i,e){return t[0]=r,t[1]=o,t[2]=i,t[3]=e,t}const n=new o("0/0/0/0");class l{static create(o,s,n=null){const h=r(o.spatialReference),a=s.origin||i(o.origin.x,o.origin.y),u=i(o.size[0]*s.resolution,o.size[1]*s.resolution),m=i(-1/0,-1/0),g=i(1/0,1/0),w=i(1/0,1/0);t(n)&&(e(m,Math.max(0,Math.floor((n.xmin-a[0])/u[0])),Math.max(0,Math.floor((a[1]-n.ymax)/u[1]))),e(g,Math.max(0,Math.floor((n.xmax-a[0])/u[0])),Math.max(0,Math.floor((a[1]-n.ymin)/u[1]))),e(w,g[0]-m[0]+1,g[1]-m[1]+1));const{cols:c,rows:d}=s;let f,F,z,p;return!n&&c&&d&&(e(m,c[0],d[0]),e(g,c[1],d[1]),e(w,c[1]-c[0]+1,d[1]-d[0]+1)),o.isWrappable?(f=i(Math.ceil(Math.round((h.valid[1]-h.valid[0])/s.resolution)/o.size[0]),w[1]),F=i(Math.floor((h.origin[0]-a[0])/u[0]),m[1]),z=i(f[0]+F[0]-1,g[1]),p=!0):(F=m,z=g,f=w,p=!1),new l(s.level,s.resolution,s.scale,a,m,g,w,u,F,z,f,p)}constructor(t,r,o,i,e,s,n,l,h,a,u,m){this.level=t,this.resolution=r,this.scale=o,this.origin=i,this.first=e,this.last=s,this.size=n,this.norm=l,this.worldStart=h,this.worldEnd=a,this.worldSize=u,this.wrap=m}normalizeCol(t){if(!this.wrap)return t;const r=this.worldSize[0];return t<0?r-1-Math.abs((t+1)%r):t%r}denormalizeCol(t,r){return this.wrap?this.worldSize[0]*r+t:t}getWorldForColumn(t){return this.wrap?Math.floor(t/this.worldSize[0]):0}getFirstColumnForWorld(t){return t*this.worldSize[0]+this.first[0]}getLastColumnForWorld(t){return t*this.worldSize[0]+this.first[0]+this.size[0]-1}getColumnForX(t){return(t-this.origin[0])/this.norm[0]}getXForColumn(t){return this.origin[0]+t*this.norm[0]}getRowForY(t){return(this.origin[1]-t)/this.norm[1]}getYForRow(t){return this.origin[1]-t*this.norm[1]}getTileBounds(t,r,o=!1){n.set(r);const i=o?n.col:this.denormalizeCol(n.col,n.world),e=n.row;return s(t,this.getXForColumn(i),this.getYForRow(e+1),this.getXForColumn(i+1),this.getYForRow(e)),t}getTileCoords(t,r,o=!1){n.set(r);const i=o?n.col:this.denormalizeCol(n.col,n.world);return Array.isArray(t)?e(t,this.getXForColumn(i),this.getYForRow(n.row)):(t.x=this.getXForColumn(i),t.y=this.getYForRow(n.row)),t}}export{l as default};