Chronosphere is an initial attempt to represent different kinds of information about the Earth and the solar system, at any given point in time. The visuals are intended to be informative rather than literally accurate while leaning towards reality when possible. For instance, the positions of the planets are correct but some of them have been brought closer to the sun to fit in the model.
Chronosphere is built around a singleton object named chronoSphere. "Temporal widgets", like moon phases and solar system orbits, are modules attached to the chronoSphere object. The time selector and map of the Earth is not currently factored as an independent module. HTML scaffolding also has to be added manually at this point.
Code taken from various opensource projects are combined, and to varying degrees, refactored. Time calculations are done with the MomentJS Library using the present date and an offset to the time being displayed.
I believe it makes sense to keep all the widgets containerized and not to share dependencies (for things like astronomical calculations) as the additional code is minimal, doing so avoids race conditions, and it allows for more flexible configuration.
- The timezone selector is sometimes off in some timezones, due to daylight savings time not being factored in yet.
- The solar terminator is not sized correctly at all zoom levels, the gradient is off, and there are sometimes seams between the map tiles.
- If the time is updated too rapidly the moon and planet calculations become skewed.
- The size of the planets is not proportioned accurately, nor are their orbits. This inaccuracy is intentional: it is impossible to display the correct proportions on any reasonably available screen.
- Run "npm install" in shell to download the Node packages
- Run "npm run build" for a production build or "npm run dev" for a development build that will watch for changes
The project is still at a very initial stage and pull requests are very welcome.
- Write tests
- Improve plugin system to better modulize temporal widgets. Develop layout systems to remove the need for HTML scaffolds.
- Improve mobile suppport
- Improve timezone selector
- Improve the accuracy of the solar terminator. At any zoom level, it should be a linear gradient 55 km wide.
- Pansharpen night time raster and increase zoom level
- Show eclipses
- Solar weather (Note: use this source of data if avalible at selected time). Ideally the sun in the present orrery can be replaced with an image representing the solar weather at that time.
- Time Magizine covers, see this tutorial
- Significant events of the day from Wikipedia
- Add constellations. This will require some sort of widget to choose the location the sky's seen from.
- Stock market data
- Marine and aviation traffic
- The map is built on top of Leaflet
- The daytime satellite images and all the satellite image hosting is provided by MapBox
- The nighttime satellite images are from NASA's Black Marble project
- The SVGs in the time controls are from Feather Icons
- The code to calculate the solar terminator is from Leaflet.Terminator
- The code for drawing the solar terminator is adapted from Leaflet Boundary Canvas
- The phase of the moon is calculated with Vladimir Agafonkin sunCalc library
- The code for calculating the position of the planets is from Chris Jager's Planetary Orbits
- MomentJS is used for time calculations
- Flatpickr is used to select dates
- The SVG's for Venus, Earth, Mars, Jupiter, and Neptune were adapted from the Tango Desktop project, Saturn is from Wikipedia, and Saturn
- Uranus is from SVG Depot
- The planet glyphs are from Wikipedia
- The JPG's currently in use, for lunar phase, were uploaded by Jay Tanner to WikiCommons
- Google Fonts, Open Sans is being used as the primary font throughout
autoprefixer,babel-core,babel-loader,babel-preset-env,file-loader,css-loader,mini-css-extract-plugin,node-sass,postcss-loader,sass-loader,style-loader,webfontloader,webpack,webpack-cli,Prettier
Released under the MIT License