UNPKG

thematic-earth

Version:

HTML-based, whole-Earth thematic maps using locally hosted data layers

2 lines 4.94 kB
/* Copyright (c) 2023 Read Write Tools. Legal use subject to the Thematic Earth Software License Agreement. */ import BaseSpatialFile from'../catalog/base-spatial-file.class.js';import GeneralFeature from'../features/general-feature.class.js';import*as MapScale from'../projection/map-scale.js';import FT from'../enum/feature-type.enum.js';import expect from'../dev/expect.js';const degreesToRadians=Math.PI/180;export default class Space extends BaseSpatialFile{constructor(e){super(e),this.createStarField(500);var a=new Object;this.generalFeature=new GeneralFeature(a,FT.SPACE),this.localPointsNeedGeoCoords=!0,this.localPointsNeedProjection=!0,this.localPointsNeedTransformation=!0,this.localPointsNeedPlacement=!0,this.thematicEarthElement.signal.broadcast('catalog/spatialFileAdded',{spatialFileType:'space'}),Object.seal(this)}recomputeStyles(e,a,t,r){expect(e,'RenderClock'),expect(a,'Visualizer'),expect(t,'Layer'),expect(r,'Number'),super.recomputeStyles(e,a,t,(()=>{this.generalFeature.computeFeatureStyle(e,a,t.tessClassname,t.tessIdentifier,0,r)}))}runCourtesyValidator(e,a,t){expect(e,'Visualizer'),expect(a,'Layer'),expect(t,'Number'),super.runCourtesyValidator((()=>{this.generalFeature.runCourtesyValidator(e,a.tessClassname,a.tessIdentifier,0,t)}))}createStarField(e){this.stars=[];for(var a=0;a<e;a++){var t=new Object;t.x=Math.random(),t.y=Math.random(),t.radius=Math.max(Math.random(),.5),a>.75*e?t.radius*=2.5:a>.5*e?t.radius*=2:a>.25*e&&(t.radius*=1.5),this.stars.push(t)}}rotation(e,a){expect(e,'RenderClock'),expect(a,'GeocentricCoordinates'),super.rotation(e,a,(()=>{}))}projection(e,a){expect(e,'RenderClock'),expect(a,'OrthographicProjection'),super.projection(e,a,(()=>{}))}transformation(e,a){expect(e,'RenderClock'),expect(a,'CartesianTransformation'),super.transformation(e,a,(()=>{}))}placement(e,a){expect(e,'RenderClock'),expect(a,'Viewport'),super.placement(e,a,(()=>{}))}drawLayer(e,a,t){expect(e,'RenderClock'),expect(a,'Earth'),expect(t,'Layer'),super.drawLayer(e,(()=>{let e=this.generalFeature.getCanvasParamsPerLayerId(t.layerId);this.drawSpace(a,e)}))}drawSpace(e,a){expect(e,'Earth'),expect(a,'CanvasParams');var t=e.canvas.getContext('2d');if('hidden'==a.safeString('visibility'))return t.globalAlpha=1,t.fillStyle='#000000ff',void t.fillRect(0,0,t.canvas.width,t.canvas.height);t.globalAlpha=1,t.fillStyle=a['deep-space-color']??'#000000ff',t.fillRect(0,0,t.canvas.width,t.canvas.height);var r=e.getVisualizedRadius(),s=a.safeNumber('earth-glow-size');s<0&&(s=0),s>r&&(s=r);var i=a.safeNumber('earth-glow-offset');i<0&&(i=0),i>s&&(i=s);var n=a.safeNumber('earth-glow-axis');'visible'==a.safeString('deep-space')&&this.renderDeepSpace(e,a),'visible'==a.safeString('earth-glow')&&this.renderEarthGlow(e,a,s,i,n),'visible'==a.safeString('sunrise')&&this.renderSunrise(e,a,s,i,n)}renderDeepSpace(e,a){expect(e,'Earth'),expect(a,'CanvasParams');var t=e.canvas.getContext('2d');t.fillStyle=a.safeString('deep-space-color'),t.fillRect(0,0,e.canvas.width,e.canvas.height),t.fillStyle=a.safeString('deep-space-star-color');var r=a.safeNumber('deep-space-star-count');r!=this.stars.length&&this.createStarField(r);for(var s=r*e.getMapScale()/MapScale.MAX_MAP_SCALE,i=0;i<s;i++){var n=e.canvas.width*this.stars[i].x,l=e.canvas.height*this.stars[i].y,o=this.stars[i].radius;t.beginPath(),t.arc(n,l,o,0,2*Math.PI,!1),t.closePath(),t.fill()}}renderEarthGlow(e,a,t,r,s){expect(e,'Earth'),expect(a,'CanvasParams');var i=e.canvas.getContext('2d'),n=e.carte.translate.a*e.carte.multiplier,l=e.carte.translate.b*e.carte.multiplier,o=e.viewport.centerPoint.x+n,c=e.viewport.centerPoint.y+l,p=e.getVisualizedRadius(),d=degreesToRadians*s,h=o+Math.cos(d)*r,u=c-Math.sin(d)*r,f=p+t,m=p-t,g=a.safeString('earth-glow-inner-color'),v=a.safeString('earth-glow-outer-color');if('none'!=g&&'none'!=v){var x=i.createRadialGradient(h,u,m,h,u,f);x.addColorStop(0,g),x.addColorStop(1,v),i.fillStyle=x,i.beginPath(),i.arc(h,u,f,0,2*Math.PI,!1),i.closePath(),i.fill()}}renderSunrise(e,a,t,r,s){expect(e,'Earth'),expect(a,'CanvasParams');var i=e.canvas.getContext('2d'),n=e.carte.translate.a*e.carte.multiplier,l=e.carte.translate.b*e.carte.multiplier,o=e.viewport.centerPoint.x+n,c=e.viewport.centerPoint.y+l,p=e.getVisualizedRadius(),d=degreesToRadians*(s+180),h=o+Math.cos(d)*p,u=c-Math.sin(d)*p,f=a.safeNumber('sunrise-inner-radius');f<0&&(f=0),f>p/4&&(f=p/4);var m=a.safeNumber('sunrise-outer-radius');null==m&&(m=p/2),(m=parseInt(m))<0&&(m=0),m>4*p&&(m=4*p),m<f&&(m=f+1);var g=a.safeString('sunrise-inner-color'),v=a.safeString('sunrise-outer-color');if('none'!=g&&'none'!=v){var x=i.createRadialGradient(h,u,f,h,u,m);x.addColorStop(0,g),x.addColorStop(1,v),i.fillStyle=x,i.beginPath(),i.arc(h,u,m,0,2*Math.PI,!1),i.closePath(),i.fill()}}discoverFeatures(e,a,t){if(this.generalFeature.featureIsVisible(t)&&0==this.thematicEarthElement.earth.getCoordinatesFromCanvasXY(e,a).isOnEarth)return this.generalFeature;return null}}