UNPKG

@juun-roh/cesium-utils

Version:

Solve common Cesium.js challenges: combine multiple terrain sources, tag and filter entity collections, and add visual highlights.

2 lines (1 loc) 9.14 kB
var x=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var P=(o,e,i,r)=>{for(var t=r>1?void 0:r?k(e,i):e,n=o.length-1,s;n>=0;n--)(s=o[n])&&(t=(r?s(e,i,t):s(t))||t);return r&&t&&x(e,i,t),t};import{Color as y,TileCoordinatesImageryProvider as D}from"cesium";import{Color as _,GridImageryProvider as S}from"cesium";import{Credit as A,EllipsoidTerrainProvider as R,Event as O}from"cesium";var m=class o{static _instance;_level=o._fromEnv();constructor(){}static get(){return this._instance||(this._instance=new o),this._instance}debug(...e){this._emit(o.Level.debug,e)}info(...e){this._emit(o.Level.info,e)}warn(...e){this._emit(o.Level.warn,e)}error(...e){this._emit(o.Level.error,e)}static _fromEnv(){let e=process.env.LOG_LEVEL?.toLowerCase();return e&&e in o.Level?o.Level[e]:o.Level.info}_emit(e,i){if(e<this._level)return;let r=o.Level[e];console[r==="debug"?"log":r](`[${r.toUpperCase()}]`.padEnd(o.LABEL_PAD+2),...i)}};(i=>{let o;(a=>(a[a.debug=0]="debug",a[a.info=1]="info",a[a.warn=2]="warn",a[a.error=3]="error"))(o=i.Level||={}),i.LABEL_PAD=Math.max(...Object.keys(i.Level).map(r=>r.length))})(m||={});var T=m;var I=T.get();function c({once:o=!0,includeStack:e=!1,message:i}){return(r,t,n)=>{let{label:s}=i;function a(){(!o||!c.has(s))&&(I.warn(M(i)),e&&console.trace("Deprecation stack trace:"),c.add(s))}if(t===void 0)return class extends r{constructor(...v){a(),super(...v)}};if(n===void 0){a();return}if(n.get){let v=n.get;if(n.get=function(){return a(),v.call(this)},n.set){let l=n.set;n.set=function(h){a(),l.call(this,h)}}return n}if(n.set){let v=n.set;return n.set=function(l){a(),v.call(this,l)},n}if(typeof n.value=="function"){let v=n.value;return n.value=function(...l){return a(),v.apply(this,l)},n}return n}}(n=>{let o=new Set;function e(s){o.add(s)}n.add=e;function i(){o.clear()}n.clear=i;function r(){return o.size}n.size=r;function t(s){return o.has(s)}n.has=t})(c||={});function M({label:o,since:e,removedIn:i,replacement:r,additional:t}){return[`${o} is deprecated since ${e}.`,r?`Use ${r} instead.`:void 0,`This will be removed in ${i}.`,t].filter(Boolean).join(" ")}var L=c;var u=class u{_regions;_defaultProvider;_fallbackProvider;_tilingScheme;_ready=!1;_availability;_errorEvent;_removeEventListeners;_hasWaterMask;_hasVertexNormals;constructor(e){this._defaultProvider=e.defaultProvider,this._fallbackProvider=e.fallbackProvider||new R,this._tilingScheme=e.defaultProvider.tilingScheme,this._regions=e.regions||[],this._availability=e.defaultProvider.availability,this._hasWaterMask=this._defaultProvider.hasWaterMask||this._regions.some(r=>r.provider.hasWaterMask),this._hasVertexNormals=this._defaultProvider.hasVertexNormals||this._regions.some(r=>r.provider.hasVertexNormals),this._errorEvent=new O,this._removeEventListeners=[];let i=new Set;for(let r of this._regions)i.has(r.provider)||(i.add(r.provider),this._removeEventListeners.push(r.provider.errorEvent.addEventListener(t=>{this._errorEvent.raiseEvent(t)})));i.has(this._defaultProvider)||this._removeEventListeners.push(this._defaultProvider.errorEvent.addEventListener(r=>{this._errorEvent.raiseEvent(r)})),i.has(this._fallbackProvider)||this._removeEventListeners.push(this._fallbackProvider.errorEvent.addEventListener(r=>{this._errorEvent.raiseEvent(r)})),this._ready=!0}get ready(){return this._ready}get tilingScheme(){return this._tilingScheme}get availability(){return this._availability}get regions(){return[...this._regions]}get defaultProvider(){return this._defaultProvider}get fallbackProvider(){return this._fallbackProvider}get credit(){let e=new Set,i=[];for(let r of this._regions){if(e.has(r.provider))continue;e.add(r.provider);let t=r.provider.credit?.html;t&&i.push(t)}if(!e.has(this._defaultProvider)){let r=this._defaultProvider.credit?.html;r&&i.push(r)}return new A(i.join(" "))}get errorEvent(){return this._errorEvent}get hasWaterMask(){return this._hasWaterMask}get hasVertexNormals(){return this._hasVertexNormals}loadTileDataAvailability(e,i,r){for(let t of this._regions)if(u.regionContainsTile(t,e,i,r))return t.provider.loadTileDataAvailability(e,i,r);return this._defaultProvider.loadTileDataAvailability(e,i,r)}getLevelMaximumGeometricError(e){let i=this._defaultProvider.getLevelMaximumGeometricError(e);for(let r of this._regions){let t=r.provider.getLevelMaximumGeometricError(e);t>i&&(i=t)}return i}requestTileGeometry(e,i,r,t){if(this._ready){for(let n of this._regions)if(u.regionContainsTile(n,e,i,r))return n.provider.requestTileGeometry(e,i,r,t);return this._defaultProvider.getTileDataAvailable(e,i,r)?this._defaultProvider.requestTileGeometry(e,i,r,t):this._fallbackProvider.requestTileGeometry(e,i,r,t)}}getTileDataAvailable(e,i,r){for(let t of this._regions)if(u.regionContainsTile(t,e,i,r))return!0;return this._defaultProvider.getTileDataAvailable(e,i,r)}destroy(){for(let e of this._removeEventListeners)e();this._removeEventListeners.length=0,this._ready=!1}};P([L({message:{label:"_fallbackProvider",since:"0.4.6",removedIn:"0.5.0"}})],u.prototype,"fallbackProvider",1);var f=u;(r=>{function o(t,n,s){return new r({regions:t.map(a=>({...a})),defaultProvider:n,fallbackProvider:s})}r.fromTileRanges=o;function e(t,n,s,a){if(t.levels&&!t.levels.includes(a))return!1;if(t.tiles){let d=t.tiles.get(a);if(!d)return!1;let[v,l]=Array.isArray(d.x)?d.x:[d.x,d.x],[h,b]=Array.isArray(d.y)?d.y:[d.y,d.y];return n>=v&&n<=l&&s>=h&&s<=b}return!1}r.regionContainsTile=e;let i;(n=>{function t(s,a,d,v){if(s.levels&&!s.levels.includes(v))return!1;if(s.tiles){let l=s.tiles.get(v);if(!l)return!1;let[h,b]=Array.isArray(l.x)?l.x:[l.x,l.x],[E,w]=Array.isArray(l.y)?l.y:[l.y,l.y];return a>=h&&a<=b&&d>=E&&d<=w}return!1}n.contains=t})(i=r.TerrainRegion||={})})(f||={});var C=f;var g=class extends S{_terrainProvider;_colors;constructor(e){let{terrainProvider:i,colors:r,...t}=e;super(t),this._terrainProvider=i,this._colors=r}requestImage(e,i,r){for(let t of this._terrainProvider.regions)if(this._isInRegionOrUpsampled(t,e,i,r))return this._createCanvasElement(this._colors.get("custom")||_.RED);return this._terrainProvider.defaultProvider.getTileDataAvailable(e,i,r)?this._createCanvasElement(this._colors.get("default")||_.BLUE):this._createCanvasElement(this._colors.get("fallback")||_.GRAY)}_isInRegionOrUpsampled(e,i,r,t){let n=i,s=r,a=t;for(;a>=0;){if(C.TerrainRegion.contains(e,n,s,a))return!0;if(a===0)break;a--,n=Math.floor(n/2),s=Math.floor(s/2)}return!1}_createCanvasElement(e){let i=document.createElement("canvas");i.width=256,i.height=256;let r=i.getContext("2d"),t=e.withAlpha(.3).toCssColorString();if(!r)throw new Error("canvas context undefined");return r.fillStyle=t,r.fillRect(0,0,256,256),Promise.resolve(i)}};var p=class{_viewer;_terrainProvider;_visible=!1;_tileCoordinatesLayer;_hybridImageryLayer;_colors=new Map([["custom",y.RED],["default",y.BLUE],["fallback",y.GRAY],["grid",y.YELLOW]]);constructor(e,i){this._viewer=e,this._terrainProvider=i.terrainProvider,i.colors&&Object.entries(i.colors).forEach(([r,t])=>{this._colors.set(r,t)}),i.tile!==void 0&&i.tile&&this.show()}setTerrainProvider(e){this._terrainProvider=e,this.update()}update(){let e=this._visible,i=!!this._tileCoordinatesLayer,r=this._hybridImageryLayer?.alpha??.5;this.clear(),e&&this.show({showTileCoordinates:i,alpha:r})}clear(){this.hide()}show(e){if(!this._terrainProvider)return;let i=e?.showTileCoordinates??!0,r=e?.alpha??.5;i&&this._ensureTileCoordinatesLayer(),this.showImageryOverlay(r),this._visible=!0}_ensureTileCoordinatesLayer(){this._tileCoordinatesLayer||(this._tileCoordinatesLayer=this._viewer.imageryLayers.addImageryProvider(new D({tilingScheme:this._terrainProvider.tilingScheme,color:y.YELLOW})))}hide(){this._tileCoordinatesLayer&&(this._viewer.imageryLayers.remove(this._tileCoordinatesLayer),this._tileCoordinatesLayer=void 0),this.hideImageryOverlay(),this._visible=!1}setColors(e){Object.entries(e).forEach(([i,r])=>{this._colors.set(i,r)}),this.update()}showImageryOverlay(e=.5){this._hybridImageryLayer&&this._viewer.imageryLayers.remove(this._hybridImageryLayer);let i=new g({terrainProvider:this._terrainProvider,colors:this._colors,tilingScheme:this._terrainProvider.tilingScheme});this._hybridImageryLayer=this._viewer.imageryLayers.addImageryProvider(i),this._hybridImageryLayer.alpha=e,console.log("HybridImageryProvider overlay enabled")}hideImageryOverlay(){this._hybridImageryLayer&&(this._viewer.imageryLayers.remove(this._hybridImageryLayer),this._hybridImageryLayer=void 0,console.log("HybridImageryProvider overlay disabled"))}showTileCoordinates(){this._ensureTileCoordinatesLayer()}hideTileCoordinates(){this._tileCoordinatesLayer&&(this._viewer.imageryLayers.remove(this._tileCoordinatesLayer),this._tileCoordinatesLayer=void 0)}setAlpha(e){this._hybridImageryLayer&&(this._hybridImageryLayer.alpha=e)}flyTo(e,i){this._viewer.camera.flyTo({destination:e,...i,complete:()=>{this._visible&&this.update()}})}get tileCoordinatesVisible(){return!!this._tileCoordinatesLayer}get visible(){return this._visible}get viewer(){return this._viewer}get colors(){return this._colors}get terrainProvider(){return this._terrainProvider}};export{p as TerrainVisualizer};