Merge branch 'master' into project/climate

This commit is contained in:
eriksunden
2022-02-22 09:23:18 +01:00
514 changed files with 19803 additions and 3261 deletions

35
Jenkinsfile vendored
View File

@@ -110,12 +110,12 @@ linux_gcc_make: {
cmakeCompileOptions += ' -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS:STRING="-DGLM_ENABLE_EXPERIMENTAL"';
cmakeCompileOptions += ' -DOpenGL_GL_PREFERENCE:STRING=GLVND -DASSIMP_BUILD_MINIZIP=1';
// Not sure why the linking of OpenSpaceTest takes so long
compileHelper.build(compileHelper.Make(), compileHelper.Gcc(), cmakeCompileOptions, 'OpenSpace', 'build-make');
compileHelper.build(compileHelper.Make(), compileHelper.Gcc(), cmakeCompileOptions, '', 'build-make');
compileHelper.recordCompileIssues(compileHelper.Gcc());
}
stage('linux-gcc-make/test') {
// testHelper.runUnitTests('build/OpenSpaceTest');
// testHelper.runUnitTests('bin/codegentest')
testHelper.runUnitTests('bin/OpenSpaceTest');
testHelper.runUnitTests('bin/codegentest')
}
cleanWs()
} // node('linux')
@@ -132,11 +132,11 @@ linux_gcc_ninja: {
def cmakeCompileOptions = moduleCMakeFlags();
cmakeCompileOptions += '-DMAKE_BUILD_TYPE=Release';
// Not sure why the linking of OpenSpaceTest takes so long
compileHelper.build(compileHelper.Ninja(), compileHelper.Gcc(), cmakeCompileOptions, 'OpenSpace', 'build-ninja');
compileHelper.build(compileHelper.Ninja(), compileHelper.Gcc(), cmakeCompileOptions, '', 'build-ninja');
}
stage('linux-gcc-ninja/test') {
// testHelper.runUnitTests('build/OpenSpaceTest');
// testHelper.runUnitTests('bin/codegentest')
testHelper.runUnitTests('bin/OpenSpaceTest');
testHelper.runUnitTests('bin/codegentest')
}
cleanWs()
} // node('linux')
@@ -153,12 +153,12 @@ linux_clang_make: {
def cmakeCompileOptions = moduleCMakeFlags()
cmakeCompileOptions += ' -DMAKE_BUILD_TYPE=Release'
// Not sure why the linking of OpenSpaceTest takes so long
compileHelper.build(compileHelper.Make(), compileHelper.Clang(), cmakeCompileOptions, 'OpenSpace', 'build-make');
compileHelper.build(compileHelper.Make(), compileHelper.Clang(), cmakeCompileOptions, '', 'build-make');
compileHelper.recordCompileIssues(compileHelper.Clang());
}
stage('linux-clang-make/test') {
// testHelper.runUnitTests('build/OpenSpaceTest');
// testHelper.runUnitTests('bin/codegentest')
testHelper.runUnitTests('bin/OpenSpaceTest');
testHelper.runUnitTests('bin/codegentest')
}
cleanWs()
} // node('linux')
@@ -175,11 +175,11 @@ linux_clang_ninja: {
def cmakeCompileOptions = moduleCMakeFlags()
cmakeCompileOptions += '-DMAKE_BUILD_TYPE=Release'
// Not sure why the linking of OpenSpaceTest takes so long
compileHelper.build(compileHelper.Ninja(), compileHelper.Clang(), cmakeCompileOptions, 'OpenSpace', 'build-ninja');
compileHelper.build(compileHelper.Ninja(), compileHelper.Clang(), cmakeCompileOptions, '', 'build-ninja');
}
stage('linux-clang-ninja/test') {
// testHelper.runUnitTests('build/OpenSpaceTest');
// testHelper.runUnitTests('bin/codegentest')
testHelper.runUnitTests('bin/OpenSpaceTest');
testHelper.runUnitTests('bin/codegentest')
}
cleanWs()
} // node('linux')
@@ -197,8 +197,7 @@ windows_msvc: {
compileHelper.recordCompileIssues(compileHelper.VisualStudio());
}
stage('windows-msvc/test') {
// Currently, the unit tests are failing on Windows
// testHelper.runUnitTests('bin\\Debug\\OpenSpaceTest')
testHelper.runUnitTests('bin\\Debug\\OpenSpaceTest')
testHelper.runUnitTests('bin\\Debug\\codegentest')
}
cleanWs()
@@ -236,8 +235,8 @@ macos_make: {
compileHelper.build(compileHelper.Make(), compileHelper.Clang(), moduleCMakeFlags(), '', 'build-make');
}
stage('macos-make/test') {
// Currently, the unit tests are crashing on OS X
// testHelper.runUnitTests('build/Debug/OpenSpaceTest')
testHelper.runUnitTests('bin/Debug/OpenSpaceTest')
testHelper.runUnitTests('bin/Debug/codegentest')
}
cleanWs()
} // node('macos')
@@ -254,8 +253,8 @@ macos_xcode: {
compileHelper.build(compileHelper.Xcode(), compileHelper.Xcode(), moduleCMakeFlags(), '', 'build-xcode');
}
stage('macos-xcode/test') {
// Currently, the unit tests are crashing on OS X
// testHelper.runUnitTests('build/Debug/OpenSpaceTest')
testHelper.runUnitTests('bin/Debug/OpenSpaceTest')
testHelper.runUnitTests('bin/Debug/codegentest')
}
cleanWs()
} // node('macos')

View File

@@ -546,7 +546,7 @@ void ActionDialog::actionSaved() {
// If we got this far, we have a new identifier and it is a new one, so we need to
// update other keybinds now
ghoul_assert(
_keybindingWidgets.list->count() == _keybindingsData.size(),
_keybindingWidgets.list->count() == static_cast<int>(_keybindingsData.size()),
"The list and data got out of sync"
);
for (int i = 0; i < _keybindingWidgets.list->count(); ++i) {

View File

@@ -419,15 +419,15 @@ void PropertiesDialog::selectLineFromScriptLog() {
// openspace.setPropertyValue('prop', value);
if (text.startsWith("openspace.setPropertyValueSingle")) {
using namespace std::string_view_literals;
_commandCombo->setCurrentIndex(0);
text = text.mid("openspace.setPropertyValueSingle"sv.size() + 1); // +1 for (
std::string_view prefix = "openspace.setPropertyValueSingle";
text = text.mid(static_cast<int>(prefix.size()) + 1); // +1 for (
}
else {
// command == "openspace.setPropertyValue"
using namespace std::string_view_literals;
_commandCombo->setCurrentIndex(1);
text = text.mid("openspace.setPropertyValue"sv.size() + 1); // +1 for (
std::string_view prefix = "openspace.setPropertyValue";
text = text.mid(static_cast<int>(prefix.size()) + 1); // +1 for (
}
// Remove everything past the closing brace

View File

@@ -1138,10 +1138,21 @@ int main(int argc, char* argv[]) {
std::filesystem::path base = configurationFilePath.parent_path();
FileSys.registerPathToken("${BASE}", base);
// For now, we just initialize glfw since we can't execute anything meaningfully
// after SGCT initializes glfw. There is a bit of startup delay because of this,
// but it shouldn't be too bad
glfwInit();
GLFWmonitor* m = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(m);
glm::ivec2 size = glm::ivec2(mode->width, mode->height);
glfwTerminate();
// Loading configuration from disk
LDEBUG("Loading configuration from disk");
*global::configuration = configuration::loadConfigurationFromFile(
configurationFilePath.string(),
size,
commandlineArguments.configurationOverride
);

View File

@@ -77,6 +77,11 @@ int main(int argc, char** argv) {
)
);
ghoul::logging::LogManager::initialize(
ghoul::logging::LogLevel::Debug,
ghoul::logging::LogManager::ImmediateFlush::Yes
);
commandlineParser.setCommandLine(arguments);
commandlineParser.execute();
@@ -98,10 +103,6 @@ int main(int argc, char** argv) {
settings.changeHostPassword = defaultChangeHostPassword.str();
}
ghoul::logging::LogManager::initialize(
ghoul::logging::LogLevel::Debug,
ghoul::logging::LogManager::ImmediateFlush::Yes
);
LINFO(fmt::format("Connection password: {}", settings.password));
LINFO(fmt::format("Host password: {}", settings.changeHostPassword));

View File

@@ -29,7 +29,7 @@ local wmap = {
Texture = textures .. "wmap_ilc_7yr_v4_200uK_RGB_sos.png",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {
@@ -55,7 +55,7 @@ local cbe = {
Texture = textures .. "COBErect.png",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {
@@ -81,7 +81,7 @@ local planck = {
Texture = textures .. "cmb4k.jpg",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {
@@ -107,7 +107,7 @@ local Halpha = {
Opacity = 0.4,
Texture = textures .. "mwHalpha-f.png",
Orientation = "Inside",
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
MirrorTexture = true,
FadeOutThreshold = 0.025,
Background = true

View File

@@ -26,7 +26,7 @@ local multiverse_planck_1 = {
Texture = textures .. "cmb4k.jpg",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {
@@ -56,7 +56,7 @@ local multiverse_planck_2 = {
Texture = textures .. "cmb4k.jpg",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {
@@ -86,7 +86,7 @@ local multiverse_planck_3 = {
Texture = textures .. "cmb4k.jpg",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {
@@ -116,7 +116,7 @@ local multiverse_planck_4 = {
Texture = textures .. "cmb4k.jpg",
Orientation = "Both",
MirrorTexture = true,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
FadeInThreshold = 0.4
},
GUI = {

View File

@@ -21,7 +21,7 @@ local sphere = {
Opacity = 0.35,
Texture = sphereTextures .. "DarkUniverse_mellinger_4k.jpg",
Orientation = "Inside",
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
MirrorTexture = true,
FadeOutThreshold = 0.0015,
Background = true

View File

@@ -19,7 +19,7 @@ local object = {
Segments = 40,
Opacity = 0.4,
Texture = textures .. "eso0932a_blend.png",
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
Orientation = "Inside",
MirrorTexture = true,
FadeOutThreshold = 0.01,

View File

@@ -1,5 +1,6 @@
asset.require("spice/base")
local sunTransforms = asset.require("scene/solarsystem/sun/transforms")
local mars = asset.require("scene/solarsystem/planets/mars/mars")
local models = asset.syncedResource({
Name = "Insight Models Chutes",
@@ -155,7 +156,7 @@ local RotationKeyframes = {
local InsightParent = {
Identifier = "InsightParent",
Parent = "Mars",
Parent = mars.Identifier,
Transform = {
Translation ={
Type = "TimelineTranslation",
@@ -740,7 +741,7 @@ local Insight_Panels_Deployed_tex2 = {
Start = panelDeployTime,
},
GUI = {
Hidden = true,
-- Hidden = true,
Name = "Insight panels_deploy_tex2",
Path = "/Solar System/Missions/Insight"
}

View File

@@ -42,7 +42,7 @@ local JWSTBand = {
DisableFadeInOut = true,
Orientation = "Inside",
Opacity = 0.05,
UseAdditiveBlending = true,
RenderBinMode = "PreDeferredTransparent",
},
Tag = { "mission_jwst_fov" },
GUI = {

View File

@@ -20,7 +20,7 @@ local L1 = {
Parent = transforms.SolarSystemBarycenter.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
RenderableType = "Opaque",
RenderBinMode = "Opaque",
Billboard = true,
Size = 700E5,
Texture = circle .. "circle.png",

View File

@@ -20,7 +20,7 @@ local L2Small = {
Parent = transforms.SolarSystemBarycenter.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
RenderableType = "Opaque",
RenderBinMode = "Opaque",
Billboard = true,
Size = 400E4,
Texture = circle .. "circle.png",
@@ -46,7 +46,7 @@ local L2 = {
Parent = transforms.SolarSystemBarycenter.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
RenderableType = "Opaque",
RenderBinMode = "Opaque",
Billboard = true,
Size = 700E5,
Texture = circle .. "circle.png",

View File

@@ -20,7 +20,7 @@ local L4 = {
Parent = transforms.SolarSystemBarycenter.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
RenderableType = "Opaque",
RenderBinMode = "Opaque",
Billboard = true,
Size = 800E6,
Texture = circle .. "circle.png",

View File

@@ -20,7 +20,7 @@ local L5 = {
Parent = transforms.SolarSystemBarycenter.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
RenderableType = "Opaque",
RenderBinMode = "Opaque",
Billboard = true,
Size = 800E6,
Texture = circle .. "circle.png",

View File

@@ -0,0 +1,70 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Carbon Monoxide - 2000"
local Identifier = "noaa-sos-atmosphere-carbon_monoxide"
local Description = [[ Carbon monoxide is known as "The Silent Killer" because it is a
colorless, odorless, tasteless gas that is poisonous to humans and other oxygen breathing
organisms. It is also naturally occurring in the atmosphere. Only in high concentrations
is carbon monoxide deadly. At the Earth's surface the concentration of carbon monoxide is
100 ppb (parts per billion), however, in urban areas it can get up to 10 ppm (parts per
million) or 100 times higher. One of the main anthropogenic sources of carbon monoxide in
the atmosphere is emissions from automobiles. In areas with heavy traffic the carbon
monoxide can be measured at 50 ppm. The natural sources of carbon monoxide include
volcanoes and brush burning. Between the anthropogenic and natural sources, scientists
estimate that the annual production of carbon monoxide is 2-5 gigatons. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/carbon-monoxide-2000/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "1024.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,64 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Season - 2004"
local Identifier = "noaa-sos-atmosphere-2004_ir_hurricane"
local Description = [[ The 2004 hurricane season started on July 31 with Hurricane Alex
and continued all the way through to December 2 with Tropical Storm Otto. The season
featured 15 tropical storms, 9 of which became hurricanes, and 6 of those were classified
as major hurricanes. This over-active hurricane season tallied up a bill of $42 billion
in damages, which at the time was record high. Florida took the brunt of the damage with
4 major hurricanes making landfall in the state. Two of the hurricanes, Frances and
Jeanne, landed in almost the same location on the east coast of Florida only 3 weeks
apart. It is estimated that one in every five homes in Florida was damaged in the 2004
hurricane season. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2004/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "cylir_%Y%m%d_%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,76 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Season - 2005"
local Identifier = "noaa-sos-atmosphere-2005_hurricane-grayir"
local Description = [[ "This hurricane season shattered records that have stood for
decades - most named storms, most hurricanes and most category five storms. Arguably, it
was the most devastating hurricane season the country has experienced in modern times,"
said retired Navy Vice Adm. Conrad C. Lautenbacher, Jr., Ph.D., undersecretary of
commerce for oceans and atmosphere and NOAA administrator. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2005/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "ir_combined_%Y%m%d_%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-4.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-5.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-6.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-7.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-8.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-9.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-10.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-11.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-12.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-13.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-14.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-15.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-16.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-17.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,60 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Season: Water Vapor and SST - 2005"
local Identifier = "noaa-sos-atmosphere-2005_hurricane-wvsst"
local Description = [[ "This hurricane season shattered records that have stood for
decades - most named storms, most hurricanes and most category five storms. Arguably, it
was the most devastating hurricane season the country has experienced in modern times,"
said retired Navy Vice Adm. Conrad C. Lautenbacher, Jr., Ph.D., undersecretary of
commerce for oceans and atmosphere and NOAA administrator. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-water-vapor-and-sst-2005/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "GI-WV-%y%j-%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,87 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Season - 2012"
local Identifier = "noaa-sos-atmosphere-2012_hurricane"
local Description = [[ "It was an extremely devastating and destructive storm, hopefully
one that people will only see once in their lifetime," National Weather Service
meteorologist, Joe Pollina, said of Hurricane Sandy. The 2012 Atlantic Hurricane season
was tied with 1887, 1995, 2010 and 2011 as the third most active year in recorded
history, producing nineteen tropical cyclones and named storms, ten hurricanes and two
major hurricanes. Annual Atlantic hurricane predictions by NOAA and Colorado State
University fell short of the actual numbers despite raising their numbers after a record
active start to the season, which began on June 1st and ended on November 30th. The
Eastern Pacific season was moderately active. This dataset names all the Atlantic and
Pacific named tropical storms and hurricanes in 2012 from the Linear IR Satellite data
recorded by geostationary satellites. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2012/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local namesDestination = syncedDirectory .. "names"
local satDestination = syncedDirectory .. "sat"
local layer_names = {
Identifier = Identifier .. "-names",
Name = Name .. " (Names)",
Type = "ImageSequenceTileLayer",
FolderPath = namesDestination,
Description = Description
}
local layer_sat = {
Identifier = Identifier .. "-sat",
Name = Name .. " (Satellites)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = satDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "linear_rgb_cyl_%Y%m%d_%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(namesDestination) then
openspace.printInfo("Extracting " .. Name .. "Names")
openspace.unzipFile(syncedDirectory .. "names.zip", namesDestination, true)
end
if not openspace.directoryExists(satDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "sat-1.zip", satDestination, true)
openspace.unzipFile(syncedDirectory .. "sat-2.zip", satDestination, true)
openspace.unzipFile(syncedDirectory .. "sat-3.zip", satDestination, true)
openspace.unzipFile(syncedDirectory .. "sat-4.zip", satDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_names)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_sat)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_names)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_sat)
end)
asset.export(layer_names)
asset.export(layer_sat)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,74 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Aerosols: Black Carbon"
local Identifier = "noaa-sos-atmosphere-aerosol-blackcarbon"
local Description = [[ With so many uncertainties attached to climate change, it is
important to look at all of the factors. As early as 1896, scientists have been analyzing
the presence of black carbon in the atmosphere. This group of three datasets looks at the
presence of aerosols in the Earth's atmosphere. The first dataset contains only black
carbon optical thickness, the second has sulfate optical thickness and the third has a
combination of both black carbon and sulfate optical thickness. The data is from January
31, 2007 and extends out 120 hours through February 4, 2007. Black carbon is commonly
known as soot. It is generated from burning fossil fuels and biomass fuels. Soot is the
result of incomplete combustion, especially of coal, diesel fuels, biofuels and other
biomass burnings. Sulfate is the result of sulfur dioxide and sulfur trioxide interacting
with other compounds in the atmosphere. Sulfate aerosols in the atmosphere are associated
with the combustion of fossil fuels and also the eruption of volcanoes like Mt.
Pinatubo. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-black-carbon/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048_png.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,74 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Aerosols: Black Carbon and Sulfate"
local Identifier = "noaa-sos-atmosphere-aerosol-blackcarbon_and_sulfate"
local Description = [[ With so many uncertainties attached to climate change, it is
important to look at all of the factors. As early as 1896, scientists have been analyzing
the presence of black carbon in the atmosphere. This group of three datasets looks at the
presence of aerosols in the Earth's atmosphere. The first dataset contains only black
carbon optical thickness, the second has sulfate optical thickness and the third has a
combination of both black carbon and sulfate optical thickness. The data is from January
31, 2007 and extends out 120 hours through February 4, 2007. Black carbon is commonly
known as soot. It is generated from burning fossil fuels and biomass fuels. Soot is the
result of incomplete combustion, especially of coal, diesel fuels, biofuels and other
biomass burnings. Sulfate is the result of sulfur dioxide and sulfur trioxide interacting
with other compounds in the atmosphere. Sulfate aerosols in the atmosphere are associated
with the combustion of fossil fuels and also the eruption of volcanoes like Mt.
Pinatubo. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-black-carbon-and-sulfate/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048_png.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,74 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Aerosols: Sulfate"
local Identifier = "noaa-sos-atmosphere-aerosol-sulfate"
local Description = [[ With so many uncertainties attached to climate change, it is
important to look at all of the factors. As early as 1896, scientists have been analyzing
the presence of black carbon in the atmosphere. This group of three datasets looks at the
presence of aerosols in the Earth's atmosphere. The first dataset contains only black
carbon optical thickness, the second has sulfate optical thickness and the third has a
combination of both black carbon and sulfate optical thickness. The data is from January
31, 2007 and extends out 120 hours through February 4, 2007. Black carbon is commonly
known as soot. It is generated from burning fossil fuels and biomass fuels. Soot is the
result of incomplete combustion, especially of coal, diesel fuels, biofuels and other
biomass burnings. Sulfate is the result of sulfur dioxide and sulfur trioxide interacting
with other compounds in the atmosphere. Sulfate aerosols in the atmosphere are associated
with the combustion of fossil fuels and also the eruption of volcanoes like Mt.
Pinatubo. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-sulfate/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048_png.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,59 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Air Traffic"
local Identifier = "noaa-sos-atmosphere-air_traffic"
local Description = [[ "On any given day, more than 87,000 flights are in the skies in
the United States. Only one-third are commercial carriers, like American, United or
Southwest. On an average day, air traffic controllers handle 28,537 commercial flights
(major and regional airlines), 27,178 general aviation flights (private planes), 24,548
air taxi flights (planes for hire), 5,260 military flights and 2,148 air cargo flights
(Federal Express, UPS, etc.). At any given moment, roughly 5,000 planes are in the skies
above the United States. In one year, controllers handle an average of 64 million
takeoffs and landings." - From the National Air Traffic Controllers Association webpage ]]
local URL = "https://sos.noaa.gov/catalog/datasets/air-traffic/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-3.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,62 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Satellites: Paths and Positions"
local Identifier = "noaa-sos-atmosphere-all_sats"
local Description = [[ Satellites are a key tool for scientists to monitor and observe
the Earth's atmosphere from space. Geostationary satellites orbit around the Earth at the
same rate as the Earth rotates so that the satellites are over the same spot on Earth all
the time. This allows them to collect a continuous stream of data for one location so
that "movies" of the data can be made. The satellites are positioned 22,300 miles above
the Earth's surface in order to view the Earth's full disk and to maintain their
geostationary orbit. Geostationary satellites travel at about 7000mph in order to
maintain their geostationary orbit. In addition to geostationary satellites, scientists
also use polar orbiting satellites. These satellites circle the Earth, crossing the poles
on each orbit. Typically, polar orbiting satellites are about 500 miles above the Earth's
surface. The satellites travel at almost 17,000mph, allowing them to orbit the Earth in
roughly 100 minutes. A polar orbiting satellite is able to cover the whole Earth in less
than one day. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/satellites-paths-and-positions/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,64 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Polar Orbiting: Aqua Satellite and MODIS Swath"
local Identifier = "noaa-sos-atmosphere-aqua_swath"
local Description = [[ Satellites are important to scientists because the instruments on
board can provide almost daily global coverage of the Earth that would otherwise not be
available. There are six instruments on board NASA's Aqua satellite. One of them is
MODIS, the Moderate Resolution Imaging Spectroradiometer. MODIS measures 36 spectral
frequencies of light, which provide a wealth of information about the physical properties
of the atmosphere and the biological and physical properties of the oceans and land. The
Aqua satellite with MODIS attached was launched May 4, 2002. Since then, Aqua has been
circling the Earth at an altitude of 438 miles (705 kilometers) every 99 minutes in a
polar orbit passing within 10 degrees of each pole every orbit. The orbit is
sun-synchronous, which means that the satellite passes over the same spot of the Earth at
about the same local time everyday. Aqua crosses the equator from south to north at about
1:30 pm local time. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-aqua-satellite-and-modis-swath/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-4.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,60 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Carbon Flux"
local Identifier = "noaa-sos-atmosphere-carbonflux"
local Description = [[ The Global Monitoring Division at NOAA diligently monitors carbon
dioxide and other trace gases in the atmosphere. One of the methods they use to sample
trace gases is collecting flasks of air from around the world that can be tested. They
have several other means for collecting samples as well. In this data set, the NOAA GMD
sampling network as of 2005 is portrayed. Circles are flask sampling locations, stars are
aircraft sites (12 flasks per flight are filled) and ships, which are only visible as
they race from Australia and New Zealand to the US west coast or Japan, or from Cape Town
to the US east coast. The coloration in the dataset represents the fluxes constructed by
the ocean, biosphere, and fossil fuel modules of the NOAA ESRL data assimilation system
for CO2 and related trace gases. The data set shows daily average fluxes constructed from
3-hour model output. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-aqua-satellite-and-modis-swath/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2160.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,112 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "CarbonTracker: Fixed Scale"
local Identifier = "noaa-sos-atmosphere-carbontracker_2000_2100-fixed_scale"
local Description = [[ "NOAA encourages science that adds benefit to society and the
environment. CarbonTracker does both." said retired Navy Vice Admiral Conrad
Lautenbacher, Ph.D., former undersecretary of commerce for oceans and atmosphere and NOAA
administrator. CarbonTracker is a system to keep track of carbon dioxide uptake and
release at the Earth's surface over time. It was developed by the Carbon Cycle Greenhouse
Gases group at NOAA's Earth System Research Laboratory. As a scientific tool,
CarbonTracker has helped improve the understanding of carbon uptake and release from the
land and oceans, and how those sources and sinks are responding to the changing climate,
increasing levels of atmospheric CO2 (the CO2 fertilization effect), and human management
of land and oceans. CarbonTracker relies on the long-term monitoring of atmospheric CO2
performed by the NOAA Global Monitoring Division and international partners. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/carbon-tracker-fixed-scale/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local fieldDestination = syncedDirectory .. "field"
local obsDestination = syncedDirectory .. "obs"
local colorbarDestination = syncedDirectory .. "colorbar"
local layer_field = {
Identifier = Identifier .. "-field",
Name = Name .. " (Field)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = fieldDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "co2wx_%Y%m%d.png"
},
Description = Description
}
local layer_obs = {
Identifier = Identifier .. "-obs",
Name = Name .. " (Observed)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = obsDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "co2wx_%Y%m%d.obs.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
-- @TODO: We need a temporal provider for ScreenSpaceImages to handle this
TexturePath = colorbarDestination .. "/" .. "co2wx_20000101.cpt.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(fieldDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "field-1.zip", fieldDestination, true)
openspace.unzipFile(syncedDirectory .. "field-2.zip", fieldDestination, true)
openspace.unzipFile(syncedDirectory .. "field-3.zip", fieldDestination, true)
end
if not openspace.directoryExists(obsDestination) then
openspace.printInfo("Extracting " .. Name .. " Observed")
openspace.unzipFile(syncedDirectory .. "obs.zip", obsDestination, true)
end
if not openspace.directoryExists(colorbarDestination) then
openspace.printInfo("Extracting " .. Name .. " Colorbar")
openspace.unzipFile(syncedDirectory .. "colorbar.zip", colorbarDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_field)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_obs)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_field)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_obs)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer_field)
asset.export(layer_obs)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,113 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "CarbonTracker: Sliding Scale"
local Identifier = "noaa-sos-atmosphere-carbontracker_2000_2100-sliding_scale"
local Description = [[ "NOAA encourages science that adds benefit to society and the
environment. CarbonTracker does both." said retired Navy Vice Admiral Conrad
Lautenbacher, Ph.D., former undersecretary of commerce for oceans and atmosphere and NOAA
administrator. CarbonTracker is a system to keep track of carbon dioxide uptake and
release at the Earth's surface over time. It was developed by the Carbon Cycle Greenhouse
Gases group at NOAA's Earth System Research Laboratory. As a scientific tool,
CarbonTracker has helped improve the understanding of carbon uptake and release from the
land and oceans, and how those sources and sinks are responding to the changing climate,
increasing levels of atmospheric CO2 (the CO2 fertilization effect), and human management
of land and oceans. CarbonTracker relies on the long-term monitoring of atmospheric CO2
performed by the NOAA Global Monitoring Division and international partners. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/carbon-tracker-sliding-scale/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local fieldDestination = syncedDirectory .. "field"
local obsDestination = syncedDirectory .. "obs"
local colorbarDestination = syncedDirectory .. "colorbar"
local layer_field = {
Identifier = Identifier .. "-field",
Name = Name .. " (Field)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = fieldDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "co2wx_%Y%m%d.png"
},
Description = Description
}
local layer_obs = {
Identifier = Identifier .. "-obs",
Name = Name .. " (Observed)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = obsDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "co2wx_%Y%m%d.obs.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
-- @TODO: We need a temporal provider for ScreenSpaceImages to handle this
TexturePath = colorbarDestination .. "/" .. "co2wx_20000101.cpt.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(fieldDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "field-1.zip", fieldDestination, true)
openspace.unzipFile(syncedDirectory .. "field-2.zip", fieldDestination, true)
openspace.unzipFile(syncedDirectory .. "field-3.zip", fieldDestination, true)
openspace.unzipFile(syncedDirectory .. "field-4.zip", fieldDestination, true)
openspace.unzipFile(syncedDirectory .. "field-5.zip", fieldDestination, true)
end
if not openspace.directoryExists(obsDestination) then
openspace.printInfo("Extracting " .. Name .. " Observed")
openspace.unzipFile(syncedDirectory .. "obs.zip", obsDestination, true)
end
if not openspace.directoryExists(colorbarDestination) then
openspace.printInfo("Extracting " .. Name .. " Colorbar")
openspace.unzipFile(syncedDirectory .. "colorbar.zip", colorbarDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_field)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_obs)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_field)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_obs)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer_field)
asset.export(layer_obs)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,98 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Human Climate Niche - 2020 and 2070"
local Identifier = "noaa-sos-atmosphere-climate_niche"
local Description = [[ The human climate niche are areas on Earth where humans have
historically lived due to favorable climate conditions related to temperature and
precipitation. For the past 6000 years, humans have mostly lived in the same climate
conditions as they do now. In addition to humans, this climate niche is also where the
production of crops and livestock typically takes place. The optimal mean annual
temperature of this identified niche is around 52 °F to 59 °F (~11 °C to 15 °C). But as
the climate changes, the areas that fit within the human climate niche will change as
well. This dataset identifies the current human climate niche, with land shaded to show
which areas are more or less suitable for people, and then projects the future human
climate niche in 2070 based on the climate projection scenario of RCP 8.5. Also included
as an additional layer that can be turned on and off is a map that shows the areas where
the mean annual temperature is greater than 84 °F (29 °C). Currently, only 0.8% of the
global land surface has a mean annual temperature greater than 84 °F, but in 2070 that is
projected to cover 19% of the global land and impact an estimated 3.5 billion people. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/human-climate-niche-2020-and-2070/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer_precip_2020 = {
Identifier = Identifier .. "-2020",
Name = Name .. " (2020)",
FilePath = syncedDirectory .. "temp-precip-2020-current-4096.png",
Description = Description
}
local layer_precip_2070 = {
Identifier = Identifier .. "-2070",
Name = Name .. " (2070)",
FilePath = syncedDirectory .. "temp-precip-2070-rcp85-4096.png",
Description = Description
}
local layer_mat_2020 = {
Identifier = Identifier .. "-mat2020",
Name = Name .. " (MAT 2020)",
FilePath = syncedDirectory .. "MAT-29-2020-4096.png",
Description = Description
}
local layer_mat_2070 = {
Identifier = Identifier .. "-mat2070",
Name = Name .. " (MAT 2070)",
FilePath = syncedDirectory .. "MAT-29-2070-4096.png",
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "niche-scale.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_precip_2020)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_precip_2070)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_mat_2020)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_mat_2070)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_precip_2020)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_precip_2070)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_mat_2020)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_mat_2070)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer_precip_2020)
asset.export(layer_precip_2070)
asset.export(layer_mat_2020)
asset.export(layer_mat_2070)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,85 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Carbon Monoxide - 2008 - 2011"
local Identifier = "noaa-sos-atmosphere-co_gmd"
local Description = [[ Carbon Monoxide (CO) is a colorless, odorless gas existing in the
atmosphere at levels between 40 and 150 parts per billion (ppb). About 40% of that is
produced by burning (combustion) of fossil fuels (coal, oil and natural gas) and biomass
(for example, wood in forest fires). CO is the primary consumer of oxidant OH, the
"cleansing agent" of the atmosphere. For example, OH "cleanses the air" by converting
atmospheric methane (CH4) to CO2, which reduces its global warming potential because
methane is a stronger greenhouse gas. OH also breaks down a whole host of other compounds
such as benzene, isoprene and halocarbons, which would otherwise give rise to smog and
reduce air quality. Therefore, an excess of atmospheric CO leads to a reduction of OH's
cleansing capacity. Another reason for measuring CO concentrations is that it is an
indicator of combustion, such as forest fires and urban emissions. A large forest fire or
emissions from heavy traffic can produce CO concentrations of 200 - 5000 ppb. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/carbon-monoxide-2008-2011/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "co_field_extended_%Y%m%d%H%M.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "3600-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "3600-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "3600-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "3600-4.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "3600-5.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "3600-6.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,69 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Aerosols: FIM Chem Model"
local Identifier = "noaa-sos-atmosphere-fim_chem"
local Description = [[ The Flow Following Finite Volume Icosahedral Model (FIM) was
developed by NOAA to produce weather forecasts. In fact, weather forecasts from the FIM
model are available for SOS here. Building upon the success of the FIM model, the
FIM-Chem model was created. The FIM-Chem is the FIM model with chemistry and aerosol
modules added. Aerosols are one of the biggest uncertainties in climate models due to
their varied affects on radiation and cloud physics. The FIM-Chem allows researchers to
forecast and study the behavior of aerosols in the atmosphere, leading to the potential
for better Earth system modeling for climate prediction. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-fim-chem-model/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "composite.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,82 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Fossil Fuel: CO2 Release - 2011-2012"
local Identifier = "noaa-sos-atmosphere-fossil_fuel"
local Description = [[ This dataset shows the result of emitting carbon dioxide from
fossil fuel burning into the atmosphere over two years. A computer model of the
atmosphere called TM5 was used to create this powerful visualization. TM5 simulates the
movement of atmospheric gases globally, using winds and atmospheric mixing as derived
from the global weather forecast. The model has been used for the main greenhouse gases
carbon dioxide (CO2), methane (CH4), and nitrous oxide (N2O), chemically active species
such as ozone (O3), and various aerosols. Like CarbonTracker, a measurement and modeling
system to keep track of carbon sources and sinks around the world, this dataset was
developed by the Carbon Cycle Greenhouse Gases group at NOAA's Earth System Research
Laboratory. Unlike CarbonTracker, this simulation does not use information from actual
observations and instead visualizes the transport of fossil fuel emissions.
Visualizations such as this dataset and CarbonTracker, aim to improve our understanding
of atmospheric carbon and how various sources and sinks may respond to the changing
climate, increasing levels of atmospheric CO2 (via the CO2 fertilization effect), and
human management of global resources. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/fossil-fuel-co2-release-2011-2012/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "%Y%m%d_fossil.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "3100.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,68 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Fukushima Radioactive Aerosol Dispersion Model"
local Identifier = "noaa-sos-atmosphere-fukushima"
local Description = [[ The Hybrid Single-Particle Lagrangian Integrated Trajectory
(HYSPLIT) model was developed by NOAA to follow the transport and dispersion of
pollutants in the atmosphere. In HYSPLIT, the computation is composed of four components:
transport by the mean wind, turbulent dispersion, scavenging and decay. A large number of
pollutant particles, which by convention are called "particles" but are just
computational "points" (particles or gases), are released at the source location and
passively follow the wind. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/fukushima-radioactive-aerosol-dispersion-model/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2054.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,60 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Geostationary Satellites"
local Identifier = "noaa-sos-atmosphere-geo_sat"
local Description = [[ Geostationary satellites are a key tool for scientists to monitor
and observe the Earth's atmosphere. They are called geostationary due to their movement.
Geostationary satellites orbit around the Earth at the same rate as the Earth rotates so
that the satellites are over the same spot on Earth all the time. This allows them to
collect a continuous stream of data for one location so that "movies" of the data can be
made. The satellites are positioned 22,300 miles above the Earth's surface in order to
view the Earth's full disk and to maintain their geostationary orbit. Geostationary
satellites travel at about 7000mph in order to maintain their geostationary orbit. Over
the United States there are two such satellites, the GOES (Geostationary Operational
Environmental Satellite) - East and GOES-West. There are many such satellites
worldwide. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/geostationary-satellites/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,60 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Geostationary Satellites: Scanning Pattern"
local Identifier = "noaa-sos-atmosphere-geo_scan"
local Description = [[ Geostationary satellites are a key tool for scientists to monitor
and observe the Earth's atmosphere. They are called geostationary due to their movement.
Geostationary satellites orbit around the Earth at the same rate as the Earth rotates so
that the satellites are over the same spot on Earth all the time. This allows them to
collect a continuous stream of data for one location so that "movies" of the data can be
made. The satellites are positioned 22,300 miles above the Earth's surface in order to
view the Earth's full disk and to maintain their geostationary orbit. Geostationary
satellites travel at about 7000mph in order to maintain their geostationary orbit. Over
the United States there are two such satellites, the GOES (Geostationary Operational
Environmental Satellite) - East and GOES-West. There are many such satellites
worldwide. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/geostationary-satellites-scanning-pattern/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,65 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Temperature Anomaly: (NASA) - 1884 - 2012"
local Identifier = "noaa-sos-atmosphere-giss_temp_anom"
local Description = [[ These maps, developed by NASA's Goddard Institute for Space
Studies (GISS), depict how much various regions of the world have warmed or cooled when
compared with a base period of 1951-1980. They show temperature anomalies, or changes,
not absolute temperature. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/temperature-anomaly-nasa-1884-2012/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2012.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,75 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Solar Insolation - Monthly (NASA)"
local Identifier = "noaa-sos-atmosphere-globe-insolation"
local Description = [[ These maps show where and how much sunlight fell on Earth's
surface during each month in 2018. Scientists call this measure solar insolation. Knowing
how much of the Sun's energy reaches the surface helps scientists understand weather and
climate patterns as well as patterns of plant growth around our world. Solar insolation
maps are also useful to engineers who design solar panels and batteries designed to
convert energy from the Sun into electricity to power appliances in our homes and work
places. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/solar-insolation-monthly-nasa/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "CERES_INSOL_M_%Y-%m.PNG"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "1440.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,75 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Solar Rainfall - Monthly (NASA)"
local Identifier = "noaa-sos-atmosphere-globe-rainfall"
local Description = [[ Globally, rain is the main source of fresh water for plants and
animals rainfall is essential for life across Earth's landscapes. In addition to moving
tremendous amounts of water through Earth's atmosphere, rain clouds also move tremendous
amounts of energy. When water evaporates from the surface and rises as vapor into the
atmosphere, it carries heat from the sun-warmed surface with it. Later, when the water
vapor condenses to form cloud droplets and rain, the heat is released into the
atmosphere. This heating is a major part of Earth's energy budget and climate. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/rainfall-monthly-nasa/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "TRMM_3B43M_%Y-%m.PNG"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "1440.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,86 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Harvey: Clouds with Precipitation - 2017"
local Identifier = "noaa-sos-atmosphere-harvey-clouds_precip"
local Description = [[ Hurricane Harvey was an extremely destructive Atlantic hurricane
which became the first major hurricane to make landfall in the U.S. since Wilma in 2005.
In a four-day period, many areas of eastern Texas received over 40 inches of rain as the
system meandered along the gulf coast causing catastrophic flooding. With a record of
51.88 inches, Harvey is the wettest tropical hurricane on record in the contiguous U.S.
The resulting floods inundated hundreds of thousands of homes, displaces more than
30,000 people, and prompted more than 17,000 rescues. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-harvey-clouds-with-precipitation-2017/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "combined_image_%Y%m%d_%H%M.jpg"
},
Description = Description
}
local colorbar_rain = {
Identifier = Identifier .. "-rain",
Name = Name .. " (Rain)",
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "rainbar_white.png",
FaceCamera = false,
CartesianPosition = { -0.5, -0.5, -2.0 }
}
local colorbar_snow = {
Identifier = Identifier .. "-snow",
Name = Name .. " (Snow)",
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "snowbar_white.png",
FaceCamera = false,
CartesianPosition = { 0.5, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar_rain);
openspace.addScreenSpaceRenderable(colorbar_snow);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar_rain)
openspace.removeScreenSpaceRenderable(colorbar_snow)
end)
asset.export(layer)
asset.export(colorbar_rain)
asset.export(colorbar_snow)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,68 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Season - 2017"
local Identifier = "noaa-sos-atmosphere-hurricane_season_2017"
local Description = [[ After a long lull in major hurricanes striking the U.S.
(2005 - 2017), the 2017 season was an extremely destructive season, featuring 17 named
storms in just the Atlantic Ocean, tying it with 1936 as the fifth-most active season
since records began in 1851. All ten of the Atlantic hurricanes occurred in a row, the
greatest number of consecutive hurricanes in the satellite era. In addition, it is by far
the costliest season on record, with a preliminary total of over $368.66 billion (USD) in
damages, which is more than double the cost of 2005's total, and nearly all of which was
due to three of the season's major hurricanes — Harvey, Irma, and Maria. All three
occurred within one month in August - September, sending disaster aide efforts reeling
and calling on volunteers for help. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2017/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "linear_rgb_cyl_%Y%m%d_%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-4.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,65 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Season: Water Vapor and SST - 2017"
local Identifier = "noaa-sos-atmosphere-hurricane_season_2017_wvsst"
local Description = [[ After a long lull in major hurricanes striking the U.S.
(2005 - 2017), the 2017 season was an extremely destructive season, featuring 17 named
storms in just the Atlantic Ocean, tying it with 1936 as the fifth-most active season
since records began in 1851. All ten of the Atlantic hurricanes occurred in a row, the
greatest number of consecutive hurricanes in the satellite era. In addition, it is by far
the costliest season on record, with a preliminary total of over $368.66 billion (USD) in
damages, which is more than double the cost of 2005's total, and nearly all of which was
due to three of the season's major hurricanes — Harvey, Irma, and Maria. All three
occurred within one month in August - September, sending disaster aide efforts reeling
and calling on volunteers for help. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-water-vapor-and-sst-2017/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "wvsst-%y%j-%H.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,46 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Tracks: Cumulative - 1950 - 2020"
local Identifier = "noaa-sos-atmosphere-hurricane_tracks-cumulative"
local Description = [[ Tracking historical hurricanes is an important way for hurricane
researchers to learn about the paths of future hurricanes. Because of this, records of
hurricane paths are archived and studied. Not all hurricanes follow the same path, but
there are certainly noticeable trends for hurricane paths. Many computer models that have
been created to predict hurricane paths include the historical data in their models. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-tracks-cumulative-1950-2005/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.png",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,86 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Isaac - 2012"
local Identifier = "noaa-sos-atmosphere-isaac"
local Description = [[ Hurricane Isaac formed as a tropical depression east of the Lesser
Antilles on August 21 and that same day was upgraded to a tropical storm. As a tropical
storm Hurricane Isaac passed over Hispaniola and Cuba, killing many people. It them
entered the Gulf of Mexico. Shortly before making landfall near the mouth of the
Mississippi River, Tropical Storm Isaac strengthened and became Hurricane Isaac on August
28. Isaac actually made landfall twice, briefly returning offshore after its first
landfall before returning to land. Isaac was a very slow moving storm after landfall and
brought significant amounts of rain to the southeastern United States. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-isaac-2012/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local radarDestination = syncedDirectory .. "radar"
local satDestination = syncedDirectory .. "sat"
local layer_radar = {
Identifier = Identifier .. "-radar",
Name = Name .. " (Radar)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = radarDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "%y%j%H%M.png"
},
Description = Description
}
local layer_sat = {
Identifier = Identifier .. "-sat",
Name = Name .. " (Sat)",
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = satDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "linear_rgb_cyl_%Y%m%d_%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(radarDestination) then
openspace.printInfo("Extracting " .. Name .. " Radar")
openspace.unzipFile(syncedDirectory .. "radar.zip", radarDestination, true)
end
if not openspace.directoryExists(satDestination) then
openspace.printInfo("Extracting " .. Name .. " Sat")
openspace.unzipFile(syncedDirectory .. "sat.zip", satDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_radar)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_sat)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_radar)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_sat)
end)
asset.export(layer_radar)
asset.export(layer_sat)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,52 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "International Space Station Track"
local Identifier = "noaa-sos-atmosphere-iss_track"
local Description = [[ The first piece of the International Space Station was sent into
orbit in 1998. Following two more pieces, astronauts first entered the space station in
November of 2000. Since then, the space station has been continuously inhabited by at
least 2 people. The station is currently designed to house 3 crew members. The
International Space Station is a cooperative space research facility being constructed
cooperatively by many nations. Several space organizations had planned their own space
stations and the groups decided to merge and work together. The original space station
was a combination of NASA's Space Station Freedom, Russia's Mir-2, and the European
Space Agency's Columbus. The project now involves NASA, the Russian Space agency, RKA;
the European Space Agency, ESA; the Japanese Space agency, JAXA; and the Canadian Space
agency, CSA. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/international-space-station-track/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,62 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Land Surface Temperature - 1950 - 1999"
local Identifier = "noaa-sos-atmosphere-land_temp"
local Description = [[ The temperature of the air varies dramatically in both time and
space. Because the Earth's rotational axis is at a 23° tilt, the Northern Hemisphere and
Southern Hemisphere simultaneously experience opposite seasons. This dataset displays the
gridded, monthly, historical terrestrial air temperature from 1950 - 1999. The original
data is from the Global Historical Climatology Network, which is part of NOAA's National
Climatic Data Center. The data was interpolated by the Center for Climatic Research at
the University of Delaware. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/international-space-station-track/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "cyl_%Y_%m.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,62 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Lightning Flash Rate"
local Identifier = "noaa-sos-atmosphere-lightning"
local Description = [[ Typically, more than 2,000 thunderstorms are active throughout the
world at a given moment, producing on the order of 100 flashes per second. NASA has two
different sensors on satellites that measuring flash frequency, the Optical Transient
Detector, OTD, and the Lightning Imaging Sensor, LIS. Data from the OTD from 1995 - 2000
and the LIS from 1998 - 2005 has been combined and averaged to create an average annual
lightning flash rate map. 11 year of data is included to remove any anomalies that might
be present in just one year. The color variations in the map display the average annual
number of lightning flashes per square kilometer. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/lightning-flash-rate/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "2048.jpg",
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.jpg",
FaceCamera = false,
Scale = 0.05,
CartesianPosition = { 0.75, 0.0, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,80 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Lightning Detection - Jun 2011 - Aug 2012"
local Identifier = "noaa-sos-atmosphere-ltg_vaisala"
local Description = [[ The Global Lightning Dataset GLD360 network detects between 1 and
3 million lightning events around the world every day of the year. Lightning activity is
not uniformly distributed across the globe. About ten times as many flashes occur over
land than over the oceans, and the majority of global lightning is concentrated in the
tropics. Over the course of a year, highest flash rate regions follow the inclination of
the sun. The northern hemisphere sees more activity during June through August; the
southern hemisphere has higher flash rates in January through March. These seasonal
patterns can be clearly seen in these images, which show the total number of events
detected in each month per square kilometer. The color scale ranges from less than .01
lightning pulses per square kilometer in the corresponding month to over 20 pulses per
square kilometer. Each color range corresponds to a factor of two of increase in the
number of events. This dataset runs from June 2011 through August 2012. ]]
local URL = "c"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "%Y_%m-1.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
Scale = 0.1,
CartesianPosition = { 0.75, 0.0, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2160.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,59 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Polar Orbiting: NASA A-Train Satellites"
local Identifier = "noaa-sos-atmosphere-nasa_sats"
local Description = [[ In order to enable coordinated science observations, the Earth
Observations System has created the A-Train. When finally completed in 2008, the A-Train
will consist of 6 polar-orbiting satellites that travel just minutes apart in a line.
Four of the satellites are NASA satellites, one is a French Centre National d'Etudes
Spatiales (CNES) satellite, and the other is a joint satellite between NASA and CNES. The
satellites have low polar orbits 438 miles (705 km) above Earth at an inclination of 98
degrees. Together, their overlapping science instruments give a comprehensive picture of
Earth weather and climate. The "A" in the A-Train is for "afternoon" because the lead
satellite, Aqua, crosses the equator at the mean local time of approximately 1:30pm. Five
of the satellites are currently in orbit, and the sixth satellite is scheduled to be
launched in 2008. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-nasa-a-train-satellites/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,69 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Carbon Dioxide Concentration: GEOS-5 Model"
local Identifier = "noaa-sos-atmosphere-nccs_models-carbon"
local Description = [[ Models create a dynamic portrait of the Earth through numerical
experiments that simulate our current knowledge of the dynamical and physical processes
governing weather and climate variability. This new simulation of carbon dioxide in
Earth's atmosphere provides an ultra-high-resolution look at how the key greenhouse gas
moves around the globe and fluctuates in volume throughout the year. These three close-up
views show how local geography affects the transport of carbon dioxide in the
atmosphere. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/carbon-dioxide-concentration-geos-5-model/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
Scale = 0.4,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,99 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Atmospheric Chemistry: GEOS-5 Model"
local Identifier = "noaa-sos-atmosphere-nccs_models-chem"
local Description = [[ Models create a dynamic portrait of the Earth through numerical
experiments that simulate our current knowledge of the dynamical and physical processes
governing weather and climate variability. The simulation visualized here captures how
winds lift up aerosols from the Earth's surface and transport them around the globe
during the period September 1, 2006 to March 17, 2007. Such simulations allow scientists
to identify the sources and pathways of these tiny particulates that influence weather
and climate. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/atmospheric-chemistry-geos-5-model/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "chem_%Y-%m-%d_%H-%M.png"
},
Description = Description
}
local legend = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "geos-5-legend.jpg",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4000-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-4.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-5.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-6.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-7.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-8.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-9.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-10.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-11.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-12.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-13.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-14.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-15.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-16.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-17.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-18.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-19.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-20.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-21.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-22.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-23.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-24.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-25.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-26.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(legend);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(legend)
end)
asset.export(layer)
asset.export(legend)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,87 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Winds: GEOS-5 Model"
local Identifier = "noaa-sos-atmosphere-nccs_models-winds"
local Description = [[ Models create a dynamic portrait of the Earth through numerical
experiments that simulate our current knowledge of the dynamical and physical processes
governing weather and climate variability. The simulation visualized here captures the
speed of winds at the tropopause, about 6-9 miles above the Earth's surface during the
period September 1, 2006 to March 17, 2007. Such simulations allow scientists to view the
intensity and turbulence of the polar and sub-tropic jet streams, which carry weather
around the globe. Red, orange and yellow are used for the fastest moving air. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/winds-geos-5-model/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "winds_%Y-%m-%d_%H-%M.png"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4000-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-4.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-5.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-6.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-7.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-8.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-9.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-10.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-11.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-12.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-13.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-14.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-15.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-16.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-17.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-18.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-19.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-20.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-21.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-22.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-23.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-24.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-25.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4000-26.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,75 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nitrogen Dioxide"
local Identifier = "noaa-sos-atmosphere-no2_omsi"
local Description = [[ Nitrogen dioxide (NO2) is a key component of urban air pollution.
The nitrogen oxides ("NOx" of which NO2 is one component) are emitted from any combustion
process. Coal- and gas-fired power plants and vehicles constitute the major anthropogenic
(human-produced) sources. Forest fires and lightning are natural sources of NO2, but
globally it is clear that anthropogenic sources dominate. High levels of NO2 are
significant as they are associated with: 1) haze that reduces visibility; 2) irritation
of the eyes, nose, throat, and lungs; 3) acid rain; 4) reduced terrestrial plant growth;
5) oxygen-depleting algal blooms; and 6) corrosion of building materials. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nitrogen-dioxide/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "NO2monthlymean_%Y%m.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "color_bar.jpg",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2880.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,53 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Polar Orbiting: NOAA Satellite Tracks"
local Identifier = "noaa-sos-atmosphere-noaa_sat-tracks"
local Description = [[ NOAA has four POES, Polar Operational Environmental Satellites,
currently in orbit. The satellites are named chronologically, based on launch date. NOAA
15 was launched in 1998, NOAA 16 was launched in 2000, NOAA 17 was launched in 2002 and
NOAA 18 was launched in 2005. In May and August of 2007 two older satellites, NOAA 14 and
NOAA 12 respectively, were decommissioned. These satellites orbit the Earth in such a way
that they pass over the poles. Each orbit takes approximately 102.1 minutes, allowing the
satellites to circle the Earth about 14.1 times each day. The polar orbit enables the
satellites to collect daily global data for land, ocean, and atmospheric applications.
This data is used a large variety of environmental monitoring applications such as
weather analysis and forecasting, climate research and prediction, global sea surface
temperature measurements, ocean dynamics research, global vegetation analysis and many
other applications. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-noaa-satellite-tracks/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,66 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Temperature Anomaly: Yearly - 500 - 2006 (Paleoclimate Evidence)"
local Identifier = "noaa-sos-atmosphere-pclim"
local Description = [[ This animation shows annual average temperature anomalies
(departure from normal) over the globe for the past 1,500 years compared to the average
temperature (normal) from 1961-1990. This data collected from over 1,000 paleoclimate
proxies. Areas shaded red are warmer than normal while areas shaded blue are cooler than
normal. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/temperature-anomaly-yearly-500-2006-paleoclimate-evidence/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.jpg",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "raw.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,63 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Polar Orbiting: NOAA-17 Satellite Coverage"
local Identifier = "noaa-sos-atmosphere-poes_sat"
local Description = [[ Satellites allow scientists to observe the Earth from above the
atmosphere. The National Oceanic and Atmospheric Administration, NOAA, has several
different types of satellites, including geostationary and polar orbiting satellites.
These datasets show the path of Polar-orbiting Operational Environmental Satellites, or
POES for short. NOAA has two POES in operation currently, a morning and afternoon
satellite. The morning satellite crosses the equator on the sun-light side of the Earth
in the morning, and the afternoon satellite crosses in the afternoon. Both satellites
orbit the Earth 14.1 times per day. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-noaa-17-satellite-coverage/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "poes_cover_%Y%j%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,81 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Precipitable Water - Antarctic Expedition - 1902 - 1903"
local Identifier = "noaa-sos-atmosphere-reanalysis-antarctic"
local Description = [[ Until 2010, the longest globally-complete estimate of the
four-dimensional atmospheric circulation was from a dataset produced jointly by NOAA's
National Centers for Environmental Prediction and the National Center for Atmospheric
Research: the NCEP-NCAR Reanalysis. This dataset of computer-generated weather map
reconstructions or "reanalyses" starts from 1948, leaving many important climate events
such as 1930's Dust Bowl drought uncovered. To expand the coverage of global gridded
reanalyses, the 20th Century Reanalysis Project is an effort led by NOAA's Earth System
Research Laboratory Physical Sciences Division and the University of Colorado CIRES
Climate Diagnostics Center to produce a reanalysis dataset spanning the entire twentieth
century, assimilating only surface observations of synoptic pressure, monthly sea surface
temperature and sea ice distribution. The pressure observations have been assembled
through international cooperation under the auspices of the Atmospheric Circulation
Reconstructions over the Earth initiative, ACRE, and working groups of the Global Climate
Observing System and World Climate Research Program. The Project uses a
recently-developed Ensemble Filter data assimilation method which directly yields each
six-hourly reanalysis field or weather map as the most likely state of the global
atmosphere, and also estimates uncertainty in that map. This dataset will provide the
first estimates of global tropospheric variability spanning 1871 to present at six-hourly
temporal resolution and 2 degree longitude by 2 degree latitude resolution. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-antarctic-expedition-1902-1903/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,81 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Precipitable Water - El Nino - 1917 - 1919"
local Identifier = "noaa-sos-atmosphere-reanalysis-elnino"
local Description = [[ Until 2010, the longest globally-complete estimate of the
four-dimensional atmospheric circulation was from a dataset produced jointly by NOAA's
National Centers for Environmental Prediction and the National Center for Atmospheric
Research: the NCEP-NCAR Reanalysis. This dataset of computer-generated weather map
reconstructions or "reanalyses" starts from 1948, leaving many important climate events
such as 1930's Dust Bowl drought uncovered. To expand the coverage of global gridded
reanalyses, the 20th Century Reanalysis Project is an effort led by NOAA's Earth System
Research Laboratory Physical Sciences Division and the University of Colorado CIRES
Climate Diagnostics Center to produce a reanalysis dataset spanning the entire twentieth
century, assimilating only surface observations of synoptic pressure, monthly sea surface
temperature and sea ice distribution. The pressure observations have been assembled
through international cooperation under the auspices of the Atmospheric Circulation
Reconstructions over the Earth initiative, ACRE, and working groups of the Global Climate
Observing System and World Climate Research Program. The Project uses a
recently-developed Ensemble Filter data assimilation method which directly yields each
six-hourly reanalysis field or weather map as the most likely state of the global
atmosphere, and also estimates uncertainty in that map. This dataset will provide the
first estimates of global tropospheric variability spanning 1871 to present at six-hourly
temporal resolution and 2 degree longitude by 2 degree latitude resolution. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-el-nino-1917-1919/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,81 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Precipitable Water - Galveston Hurricane - 1900"
local Identifier = "noaa-sos-atmosphere-reanalysis-hurricane"
local Description = [[ Until 2010, the longest globally-complete estimate of the
four-dimensional atmospheric circulation was from a dataset produced jointly by NOAA's
National Centers for Environmental Prediction and the National Center for Atmospheric
Research: the NCEP-NCAR Reanalysis. This dataset of computer-generated weather map
reconstructions or "reanalyses" starts from 1948, leaving many important climate events
such as 1930's Dust Bowl drought uncovered. To expand the coverage of global gridded
reanalyses, the 20th Century Reanalysis Project is an effort led by NOAA's Earth System
Research Laboratory Physical Sciences Division and the University of Colorado CIRES
Climate Diagnostics Center to produce a reanalysis dataset spanning the entire twentieth
century, assimilating only surface observations of synoptic pressure, monthly sea surface
temperature and sea ice distribution. The pressure observations have been assembled
through international cooperation under the auspices of the Atmospheric Circulation
Reconstructions over the Earth initiative, ACRE, and working groups of the Global Climate
Observing System and World Climate Research Program. The Project uses a
recently-developed Ensemble Filter data assimilation method which directly yields each
six-hourly reanalysis field or weather map as the most likely state of the global
atmosphere, and also estimates uncertainty in that map. This dataset will provide the
first estimates of global tropospheric variability spanning 1871 to present at six-hourly
temporal resolution and 2 degree longitude by 2 degree latitude resolution. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-galveston-hurricane-1900/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048_png.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,58 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Hurricane Sandy: Linear IR - Oct. 2012"
local Identifier = "noaa-sos-atmosphere-sandy"
local Description = [[ Hurricane Sandy was a memorable and disastrous storm that hit the
Caribbean islands and the Mid-Atlantic States in October of 2012.It was the second
costliest storm in U.S. history, after Hurricane Katrina. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-galveston-hurricane-1900/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "linear_rgb_cyl_%Y%m%d_%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,63 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Polar Orbiting: NOAA-17 and NOAA-18"
local Identifier = "noaa-sos-atmosphere-sunsync_sat"
local Description = [[ Satellites allow scientists to observe the Earth from above the
atmosphere. The National Oceanic and Atmospheric Administration, NOAA, has several
different types of satellites, including geostationary and polar orbiting satellites.
These datasets show the path of Polar-orbiting Operational Environmental Satellites, or
POES for short. NOAA has two POES in operation currently, a morning and afternoon
satellite. The morning satellite crosses the equator on the sun-light side of the Earth
in the morning, and the afternoon satellite crosses in the afternoon. Both satellites
orbit the Earth 14.1 times per day. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-noaa-17-and-noaa-18/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "sunsync_%Y%j%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,79 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Temperature Anomaly: Yearly (NOAA) - 1880 - Present"
local Identifier = "noaa-sos-atmosphere-temp_anom"
local Description = [[ This animation shows Earth's surface temperature from 1880 through
2019 compared to the 20th century average. Maps are based on data from NOAA's National
Climatic Data Center. In 2016, the combined land and ocean surface temperature was 1.69°F
(0.94°C) above the 20th century average, making the year the warmest since records began
in 1880. This is the third consecutive year a new global annual temperature record has
been set. The first eight months of 2016 set monthly temperatures records and the last
four months were ranked among the top five for each month's temperature records. To date,
all 16 years of the 21st century rank among the seventeen warmest on record (1998 is
currently the eighth warmest.) The five warmest years have all occurred since 2010. 2017
was the third warmest, slightly cooler than the previous two. 2018 was the fourth
warmest. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/temperature-anomaly-yearly-noaa-1880-present/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "ANOM.yearly.%Y.color.png"
},
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
BackgroundColor = { 1.0, 1.0, 1.0, 1.0 },
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096_new.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,56 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Tropical Widening"
local Identifier = "noaa-sos-atmosphere-tropical_widening"
local Description = [[ This dataset was developed as part of the EarthNow project, and
shows the changes in the tropical zone boundaries over the last three decades. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/tropical-widening/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "2048.png",
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.jpg",
FaceCamera = false,
Scale = 0.175,
CartesianPosition = { 0.0, -0.3, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,64 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Typhoon Haiyan: Water Vapor and SST - Oct - Nov 2013"
local Identifier = "noaa-sos-atmosphere-typhoon_haiyan-wvsst"
local Description = [[ Typhoon Haiyan, also known in the Phillippines as Typhoon Yolanda,
may be the strongest recorded tropical cyclone to make landfall with sustained speeds up
to 195 mph. If confirmed, it would beat the previous record holder, Hurricane Camille
(1969). This dataset is taken from the Real-Time Linear IR satellite dataset and
Real-time: SST from October 30th to November 12th, 2013. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/typhoon-haiyan-water-vapor-and-sst-oct-nov-2013/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local track = {
Identifier = Identifier .. "-track",
Name = Name .. " (Track)",
FilePath = syncedDirectory .. "track.png",
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", track)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", track)
end)
asset.export(layer)
asset.export(track)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,70 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Typhoon Haiyan - Oct - Nov 2013"
local Identifier = "noaa-sos-atmosphere-typhoon_haiyan"
local Description = [[ Typhoon Haiyan, also known in the Phillippines as Typhoon Yolanda,
may be the strongest recorded tropical cyclone to make landfall with sustained speeds up
to 195 mph. If confirmed, it would beat the previous record holder, Hurricane Camille
(1969). This dataset is taken from the Real-Time Linear IR satellite dataset from October
30th to November 12th, 2013. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/typhoon-haiyan-oct-nov-2013/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "linear_rgb_cyl_%Y%m%d_%H%M.jpg"
},
Description = Description
}
local track = {
Identifier = Identifier .. "-track",
Name = Name .. " (Track)",
FilePath = syncedDirectory .. "track.png",
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", track)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", track)
end)
asset.export(layer)
asset.export(track)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,60 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Volcanic Ash Eruption: Iceland"
local Identifier = "noaa-sos-atmosphere-volcano_ash"
local Description = [[ Eyjafjallajokull, a glacier covered volcano in southern Iceland,
erupted explosively on April 14, 2010. The name Eyjafjallajokull is Icelandic for
"island-mountain glacier." The volcano initially erupted on March 20, but this original
eruption was much smaller and only caused a brief evacuation of the local area. The April
14 event was 10 to 20 times more powerful and had international impacts. Locally, the
eruption and resulting lava melted the surrounding glacier, causing major flooding.
Internationally, air traffic was impacted for several days following the eruption. The
volcano ejected ash over 30,000ft into the atmosphere, causing significant disruptions to
the European and Trans-Atlantic air travel. Airspace over much of northern Europe was
closed from April 15 through April 23 for concerns over the abrasive volcanic ash causing
engine failures. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/volcanic-ash-eruption-iceland/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2992.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,70 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "NOAA Science on a Sphere. Agriculture: Cropland Intensity"
local Identifier = "noaa-sos-land-agriculture-cropland"
local Description = [[ These visualizations, created by the University of Minnesota's
Institute on the Environment, show the global land use intensity for pastureland and
cropland. Cropland is land devoted to growing plants for humans use for food, material,
or fuel. Pastureland is land used for raising and grazing animals. Altogether, cropland
covers about 16 million square kilometers, an area of land approximately the size of
South America. Global pastureland occupies more than 30 million square kilometers, about
the area of Africa. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-cropland-intensity/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.png",
Description = Description
}
local layer_countries = {
Identifier = Identifier .. "-countries",
Name = Name .. " (w/ countries)",
FilePath = syncedDirectory .. "4096_countries.png",
Description = Description
}
local legend = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "legend.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_countries)
openspace.addScreenSpaceRenderable(legend);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_countries)
openspace.removeScreenSpaceRenderable(legend)
end)
asset.export(layer)
asset.export(layer_countries)
asset.export(legend)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,70 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "NOAA Science on a Sphere. Agriculture: Pastureland Intensity"
local Identifier = "noaa-sos-land-agriculture-pastureland"
local Description = [[ These visualizations, created by the University of Minnesota's
Institute on the Environment, show the global land use intensity for pastureland and
cropland. Cropland is land devoted to growing plants for humans use for food, material,
or fuel. Pastureland is land used for raising and grazing animals. Altogether, cropland
covers about 16 million square kilometers, an area of land approximately the size of
South America. Global pastureland occupies more than 30 million square kilometers, about
the area of Africa. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-pastureland-intensity/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.png",
Description = Description
}
local layer_countries = {
Identifier = Identifier .. "-countries",
Name = Name .. " (w/ countries)",
FilePath = syncedDirectory .. "4096_countries.png",
Description = Description
}
local legend = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "legend.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_countries)
openspace.addScreenSpaceRenderable(legend);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_countries)
openspace.removeScreenSpaceRenderable(legend)
end)
asset.export(layer)
asset.export(layer_countries)
asset.export(legend)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,66 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "NOAA Science on a Sphere. Bird Migration Patterns - Western Hemisphere"
local Identifier = "noaa-sos-land-birds"
local Description = [[ This dataset shows the migration of 118 species of terrestrial
bird populations in the Western Hemisphere. Each dot represents the estimated location of
the center of each species' population for each day of the year. These estimations come
from millions of observations from the eBird citizen-science database. eBird is a
real-time, online checklist program, launched in 2002 by the Cornell Lab of Ornithology
and National Audubon Society, that allows birdwatchers to enter their observations. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/bird-migration-patterns-western-hemisphere/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "birds.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,48 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "NOAA Science on a Sphere. Blue Marble: without Clouds"
local Identifier = "noaa-sos-land-blue_marble-blue_marble"
local Description = [[ The Blue Marble is an incredibly detailed, true-color depiction of
the Earth. NASA is responsible for this dataset made from a compilation of satellite
images throughout 2001. Most of the information came from NASA's MODIS, the Moderate
Resolution Imaging Spectroradiometer, which is attached to the Terra satellite 435 miles
above Earth. The background image of the land and oceans was created using data from June
through September of 2001. This could not be done in a single day or even a week because
on any given day clouds are blocking a significant portion of the surface. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-without-clouds/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,61 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Blue Marble: with Topography - Seasonal"
local Identifier = "noaa-sos-land-blue_marble-next_gen-topo"
local Description = [[ The Blue Marble is an incredibly detailed, true-color depiction of
the Earth. The Blue Marble Next Generation is an update on the original that has greater
detail. "The original Blue Marble was a composite of four months of MODIS observations
with a spatial resolution (level of detail) of 1 square kilometer per pixel. Blue Marble:
Next Generation offers a years worth of monthly composites at a spatial resolution of
500 meters.". ]]
local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-with-topography-seasonal/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "world.%Y%m.3x5400x2700.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "5400.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,61 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Blue Marble: with Topography and Bathymetry"
local Identifier = "noaa-sos-land-blue_marble-next_gen-topo_bathy"
local Description = [[ The Blue Marble is an incredibly detailed, true-color depiction of
the Earth. The Blue Marble Next Generation is an update on the original that has greater
detail. "The original Blue Marble was a composite of four months of MODIS observations
with a spatial resolution (level of detail) of 1 square kilometer per pixel. Blue Marble:
Next Generation offers a years worth of monthly composites at a spatial resolution of
500 meters.". ]]
local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-with-topography-seasonal/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "world.topo.bathy.%Y%m.3x5400x2700.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "5400.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,66 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Blue Marble and Nighttime Lights"
local Identifier = "noaa-sos-land-bluemarble_nightlights"
local Description = [[ This dataset shows the Earth with daytime and nighttime views of
the Earth, to demonstrate how only half of the Earth is illumintated at one time. The
Blue Marble is an incredibly detailed, true-color depiction of the Earth, and is shown on
the daylight side of the Earth in this dataset. NASA is responsible for The Blue Marble,
made from a compilation of satellite images throughout 2001. Most of the information came
from NASA's MODIS, the Moderate Resolution Imaging Spectroradiometer, which is attached
to the Terra satellite 435 miles above Earth. The background image of the land and oceans
was created using data from June through September of 2001. This could not be done in a
single day or even a week because on any given day clouds are blocking a significant
portion of the surface. The cloud image is a composite of three days worth of data. The
first two days of data were collected in the visible wavelength and the third day was
needed to get a view of the clouds over the poles using thermal infrared imagery. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-and-nighttime-lights/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-3.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-4.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-5.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "4096-6.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,62 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Blue Marble - Seasonal"
local Identifier = "noaa-sos-land-seasonal_blue_marble"
local Description = [[ The Blue Marble is an incredibly detailed, true-color depiction of
the Earth. NASA is responsible for this dataset made from a compilation of satellite
images throughout 2001. Most of the information came from NASA's MODIS, the Moderate
Resolution Imaging Spectroradiometer, which is attached to the Terra satellite 435 miles
above Earth. The background image of the land and oceans was created using data from June
through September of 2001. This could not be done in a single day or even a week because
on any given day clouds are blocking a significant portion of the surface. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-seasonal/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "world%Y%jx4kx2k.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,54 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Dams and Reservoirs - 1800 - 2010"
local Identifier = "noaa-sos-land-dams-global"
local Description = [[ Humans have manipulated rivers for thousands of years, but over
the last 200 years dams on rivers have become rampant. Reservoirs and dams are
constructed for water storage, to reduce the risk of river flooding, and for the
generation of power. They are one of the major footprints of humans on Earth and change
the world's hydrological cycle. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/dams-and-reservoirs-1800-2010/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer_images = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_images)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_images)
end)
asset.export(layer_images)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,54 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Dams and Reservoirs: Mississippi River - 1800 - 2010"
local Identifier = "noaa-sos-land-dams-mississippi"
local Description = [[ This dataset illustrates the construction of dams in the
Mississippi River Basin from 1800 to the present. We display all dams listed in the
Global Reservoir and Dam Database (GRanD). All dams that have a reservoir with a storage
capacity of more than 0.1 cubic kilometers are included, and many smaller dams were added
where data were available. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/dams-and-reservoirs-mississippi-river-1800-2010/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,54 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Dams and Reservoirs: Yangtze - 1800 - 2010"
local Identifier = "noaa-sos-land-dams-yangtze"
local Description = [[ Humans have manipulated rivers for thousands of years, but over
the last 200 years dams on rivers have become rampant. Reservoirs and dams are
constructed for water storage, to reduce the risk of river flooding, and for the
generation of power. They are one of the major footprints of humans on Earth and change
the world's hydrological cycle. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/dams-and-reservoirs-yangtze-1800-2010/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,62 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Day/Night Terminator (daily)"
local Identifier = "noaa-sos-land-day_night-06z_only"
local Description = [[ The line that separates day and night is called the terminator. It
is also referred to as the "grey line" and the "twilight zone." It is a fuzzy line due to
our atmosphere bending sunlight. In fact, the atmosphere bends sunlight by half a degree,
which is about 37 miles (60 km). It is commonly thought that while half of the Earth is
covered in darkness, the other half is covered in sunlight. This is actually not true
because of the bending of the sunlight results in the land covered by sunlight having
greater area than the land covered by darkness. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-daily/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "daynite_%Y%j%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,64 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Day/Night Terminator (hourly)"
local Identifier = "noaa-sos-land-day_night-full_year"
local Description = [[ The line that separates day and night is called the terminator. It
is also referred to as the "grey line" and the "twilight zone." It is a fuzzy line due to
our atmosphere bending sunlight. In fact, the atmosphere bends sunlight by half a degree,
which is about 37 miles (60 km). It is commonly thought that while half of the Earth is
covered in darkness, the other half is covered in sunlight. This is actually not true
because of the bending of the sunlight results in the land covered by sunlight having
greater area than the land covered by darkness. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-hourly/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "daynite_%Y%j%H%M.jpg"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048-1.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "2048-2.zip", imagesDestination, true)
openspace.unzipFile(syncedDirectory .. "2048-3.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,56 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Day/Night Terminator (single day)"
local Identifier = "noaa-sos-land-day_night-oneday"
local Description = [[ The line that separates day and night is called the terminator. It
is also referred to as the "grey line" and the "twilight zone." It is a fuzzy line due to
our atmosphere bending sunlight. In fact, the atmosphere bends sunlight by half a degree,
which is about 37 miles (60 km). It is commonly thought that while half of the Earth is
covered in darkness, the other half is covered in sunlight. This is actually not true
because of the bending of the sunlight results in the land covered by sunlight having
greater area than the land covered by darkness. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-single-day/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "2048.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,57 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nighttime Lights Comparison - 1992 and 2002"
local Identifier = "noaa-sos-land-earth_night-1992_2002"
local Description = [[ The data was recorded by the Defense Meteorological Satellite
Program (DMSP) in the National Geophysical Data Center (NGDC), now part of NOAA National
Centers for Environmental Information (NCEI). The data was collected using polar orbiting
satellites that provide full cover of the globe twice a day. The satellites have an
Operation Linescan system which allows them to detect low levels of visible-near infrared
radiance at night. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-comparison-1992-and-2002/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer_1992 = {
Identifier = Identifier .. "-1992",
Name = Name .. " (1992)",
FilePath = syncedDirectory .. "Nightlights_1992.jpg",
Description = Description
}
local layer_2002 = {
Identifier = Identifier .. "-2002",
Name = Name .. " (2002)",
FilePath = syncedDirectory .. "Nightlights_2002.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_1992)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_2002)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_1992)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_2002)
end)
asset.export(layer_1992)
asset.export(layer_2002)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,47 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nighttime Lights Comparison - 1992, 2000, and 2008"
local Identifier = "noaa-sos-land-earth_night-1992_2008"
local Description = [[ The data was recorded by the Defense Meteorological Satellite
Program (DMSP) in the National Geophysical Data Center (NGDC), now part of NOAA National
Centers for Environmental Information (NCEI). The data was collected using polar orbiting
satellites that provide full cover of the globe twice a day. The satellites have an
Operation Linescan system which allows them to detect low levels of visible-near
infrared radiance at night. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-comparison-1992-2000-and-2008/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "8000.png",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,59 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nighttime Lights Comparison - 1992 and 2009"
local Identifier = "noaa-sos-land-earth_night-1992_2009"
local Description = [[ The data was recorded by the Defense Meteorological Satellite
Program (DMSP) in the National Geophysical Data Center (NGDC), now part of NOAA National
Centers for Environmental Information (NCEI). The data was collected using polar orbiting
satellites that provide full cover of the globe twice a day. The satellites have an
Operation Linescan system which allows them to detect low levels of visible-near infrared
radiance at night. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-comparison-1992-and-2009/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "5000.png",
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "colorbar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,45 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nighttime Lights - 2012"
local Identifier = "noaa-sos-land-earth_night-2012"
local Description = [[ Earth at Night has been an SOS-user favorite dataset for many
years. Black Marble 2012 is the newest version of the spectacular view of our planet from
near-Earth orbit at night, which is the result of a partnership between NOAA, NASA, and
the Department of Defense. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-2012/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "3600.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,50 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nighttime Lights (colorized)"
local Identifier = "noaa-sos-land-earth_night-color_nightlights"
local Description = [[ The data was recorded by the Defense Meteorological Satellite
Program (DMSP) in the National Geophysical Data Center (NGDC), now part of NOAA National
Centers for Environmental Information (NCEI). The data was collected using polar orbiting
satellites that provide full cover of the globe twice a day. The satellites have an
Operation Linescan system which allows them to detect low levels of visible-near infrared
radiance at night. With this data, it is possible to detect clouds illuminated by
moonlight, lights from cities and towns, industrial sites, gas flares, fires, lightning,
and aurora. The Nighttime Lights of the World data set was complied from Defense
Meteorological Satellite Program (DMSP) data spanning October 1994 - March 1995. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-colorized/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.png",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,50 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Nighttime Lights"
local Identifier = "noaa-sos-land-earth_night-nightlights"
local Description = [[ The data was recorded by the Defense Meteorological Satellite
Program (DMSP) in the National Geophysical Data Center (NGDC), now part of NOAA National
Centers for Environmental Information (NCEI). The data was collected using polar orbiting
satellites that provide full cover of the globe twice a day. The satellites have an
Operation Linescan system which allows them to detect low levels of visible-near infrared
radiance at night. With this data, it is possible to detect clouds illuminated by
moonlight, lights from cities and towns, industrial sites, gas flares, fires, lightning,
and aurora. The Nighttime Lights of the World data set was complied from Defense
Meteorological Satellite Program (DMSP) data spanning October 1994 - March 1995. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4800.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,102 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Earthquakes: Cumulative - 1980 - 1995"
local Identifier = "noaa-sos-land-earthquake-1980_1995_quakes"
local Description = [[ It is estimated that there are 500,000 detectable earthquakes in
the world each year. Of those, 100,000 can be felt and 100 of them cause damage. Anything
that causes seismic waves to radiate throughout the Earth is an earthquake. The cause of
earthquakes can be natural, such as one tectonic plate slipping below another, or
anthropogenic (cause by humans), such as drilling for fossil fuels, extraction of
minerals, huge explosions, and the collapse of large buildings. Because most natural
earthquakes occur due to slipping plates, the boundaries between tectonic plates are "hot
spots" for earthquakes. In the Pacific Ocean, the Pacific Plate is referred to as the
Ring of Fire because this is one of the most active plates where earthquakes and
volcanoes frequently occur. In order to rate the strength and magnitude of earthquakes,
the Richter magnitude scale was created. It is a base-10 logarithm scale of ground motion
100km from the epicenter. Every whole-number increase in magnitude means the amplitude of
the seismic wave is ten times greater. 4.0 - 4.9 on the scale is considered light, with
some shaking of indoor items and significant damage unlikely. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-cumulative-1980-1995/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local legend = {
Identifier = Identifier .. "-legend",
Name = Name .. " (Legend)",
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "legend.png",
FaceCamera = false,
Scale = 0.3,
CartesianPosition = { 0.0, -0.6, -2.0 }
}
local quakebar = {
Identifier = Identifier .. "-quake",
Name = Name .. " (Quake)",
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "quakebar.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.3, -2.0 }
}
local quakebar_combined = {
Identifier = Identifier .. "-combined",
Name = Name .. " (Combined)",
Type = "ScreenSpaceImageLocal",
Enabled = false,
TexturePath = syncedDirectory .. "quakebar_combined.png",
FaceCamera = false,
Scale = 0.6,
CartesianPosition = { 0.5, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "1024.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(legend);
openspace.addScreenSpaceRenderable(quakebar);
openspace.addScreenSpaceRenderable(quakebar_combined);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(legend)
openspace.removeScreenSpaceRenderable(quakebar)
openspace.removeScreenSpaceRenderable(quakebar_combined)
end)
asset.export(layer)
asset.export(legend)
asset.export(quakebar)
asset.export(quakebar_combined)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,103 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Earthquakes - 2001-2015"
local Identifier = "noaa-sos-land-earthquake-2001_2015"
local Description = [[ This animation shows every recorded earthquake in sequence as they
occurred from January 1, 2001, through December 31, 2015, at a rate of 30 days per
second. The earthquake hypocenters first appear as flashes then remain as colored circles
before shrinking with time so as not to obscure subsequent earthquakes. The size of the
circle represents the earthquake magnitude while the color represents its depth within
the earth. At the end of the animation it will first show all quakes in this 15-year
period. Next, it will show only those earthquakes greater than magnitude 6.5, the
smallest earthquake size known to make a tsunami. Finally it will only show those
earthquakes with magnitudes of magnitude 8.0 or larger, the "great" earthquakes most
likely to pose a tsunami threat when they occur under the ocean or near a coastline and
when they are shallow within the earth (less than 100 km or 60 mi. deep). ]]
local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-2001-2015/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer_allquakes = {
Identifier = Identifier .. "-allquakes",
Name = Name .. " (All Quakes)",
FilePath = syncedDirectory .. "All_Quakes_2001-2015_4k.jpg",
Description = Description
}
local layer_quake_basemap = {
Identifier = Identifier .. "-quake-basemap",
Name = Name .. " (Quake Basemap)",
FilePath = syncedDirectory .. "quake_basemap_4k.jpg",
Description = Description
}
local layer_tsunami_basemap = {
Identifier = Identifier .. "-tsunami-basemap",
Name = Name .. " (Tsunami Basemap)",
FilePath = syncedDirectory .. "Tsunami_basemap_4k.jpg",
Description = Description
}
local layer_quakes_gte6_5 = {
Identifier = Identifier .. "-gte6_5",
Name = Name .. " (GTE 6.5)",
FilePath = syncedDirectory .. "Quakes_gte6.5_2001-2015_4k.jpg",
Description = Description
}
local layer_quakes_gte8 = {
Identifier = Identifier .. "-gte8",
Name = Name .. " (GTE 8.0)",
FilePath = syncedDirectory .. "Quakes_gte8_2001-2015_4k.jpg",
Description = Description
}
local legend = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "Earthquake_Legend.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_allquakes)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_quake_basemap)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_tsunami_basemap)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_quakes_gte6_5)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_quakes_gte8)
openspace.addScreenSpaceRenderable(legend);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_allquakes)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_quake_basemap)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_tsunami_basemap)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_quakes_gte6_5)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_quakes_gte8)
openspace.removeScreenSpaceRenderable(legend)
end)
asset.export(layer_allquakes)
asset.export(layer_quake_basemap)
asset.export(layer_tsunami_basemap)
asset.export(layer_quakes_gte6_5)
asset.export(layer_quakes_gte8)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,104 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Earthquakes of the 20th Century"
local Identifier = "noaa-sos-land-earthquakes_1901_2000"
local Description = [[ This animation shows every recorded earthquake in sequence as they
occurred from January 1, 1901, through December 31, 2000, at a rate of 1 year per second.
The earthquake hypocenters first appear as flashes then remain as colored circles before
shrinking with time so as not to obscure subsequent earthquakes. The size of the circle
represents the earthquake magnitude while the color represents its depth within the
earth. At the end of the animation it will first show all quakes in this 100-year period.
Next, it will show only those earthquakes greater than magnitude 6.5, the smallest
earthquake size known to make a tsunami. It will then show only those earthquakes with
magnitudes of 8.0 or larger, the "great" earthquakes most likely to pose a tsunami
threat when they occur under the ocean or near a coastline and when they are shallow
within the earth (less than 100 km or 60 mi. deep). The animation concludes by showing
the plate boundary faults responsible for the majority of all of these earthquakes. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-of-the-20th-century/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer_allquakes = {
Identifier = Identifier .. "-allquakes",
Name = Name .. " (All Quakes)",
FilePath = syncedDirectory .. "All_Quakes_1901-2000_4k.jpg",
Description = Description
}
local layer_quake_basemap = {
Identifier = Identifier .. "-quake-basemap",
Name = Name .. " (Quake Basemap)",
FilePath = syncedDirectory .. "quake_basemap_4k.jpg",
Description = Description
}
local layer_plate_boundaries = {
Identifier = Identifier .. "-plate_boundaries",
Name = Name .. " (Plate Boundaries)",
FilePath = syncedDirectory .. "Plate_Boundaries_4k.jpg",
Description = Description
}
local layer_quakes_gte6_5 = {
Identifier = Identifier .. "-gte6_5",
Name = Name .. " (GTE 6.5)",
FilePath = syncedDirectory .. "Quakes_gte6.5_1901-2000_4k.jpg",
Description = Description
}
local layer_quakes_gte8 = {
Identifier = Identifier .. "-gte8",
Name = Name .. " (GTE 8.0)",
FilePath = syncedDirectory .. "Quakes_gte8_1901-2000_4k.jpg",
Description = Description
}
local legend = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "Earthquake_Legend.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_allquakes)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_quake_basemap)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_plate_boundaries)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_quakes_gte6_5)
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer_quakes_gte8)
openspace.addScreenSpaceRenderable(legend);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_allquakes)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_quake_basemap)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_plate_boundaries)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_quakes_gte6_5)
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer_quakes_gte8)
openspace.removeScreenSpaceRenderable(legend)
end)
asset.export(layer_allquakes)
asset.export(layer_quake_basemap)
asset.export(layer_plate_boundaries)
asset.export(layer_quakes_gte6_5)
asset.export(layer_quakes_gte8)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,68 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Earthquakes and Eruptions - 1960 - 2010"
local Identifier = "noaa-sos-land-earthquakes_and_eruptions"
local Description = [[ Most of Earth's earthquakes and volcanic eruptions occur at the
boundaries of the tectonic plates. This dataset shows all earthquakes of magnitude 5.0 or
greater from 1960 through 2010. The earthquakes are illustrated with a large white dot at
the time of the event. The size of the dot is proportional to the magnitude of the
earthquake. A musical tone is generated for the larger events. The larger the earthquake,
the lower the tone. The white dots eventually turn gray and slowly shrink to single-pixel
dots. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-and-eruptions-1960-2010/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "ImageSequenceTileLayer",
FolderPath = imagesDestination,
Description = Description
}
local legend = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "eqmaglegend.png",
FaceCamera = false,
CartesianPosition = { 0.0, -0.5, -2.0 }
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(legend);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(legend)
end)
asset.export(layer)
asset.export(legend)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,67 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Earth's Magnetic Lines"
local Identifier = "noaa-sos-land-earths_magnetism_magnetic_lines"
local Description = [[ Earth is like a giant magnet with a North and South Pole. However,
the magnetic North and South Pole are not aligned with the Geographic North and South
Pole. The Geographic North Pole is defined by the latitude 90° N and is the axis of the
Earth's rotation. The Magnetic North Pole is where the Earth's magnetic field points
vertically downward. The Earth creates its own magnetic field from the electric currents
created in the liquid iron-nickel core. In order to illustrate the earth's magnetic
field, three datasets for Earth's Magnetism have been created. All of these datasets show
the changes in the magnetic field from 1590 - 2010. The first dataset shows the magnetic
field lines at the surface of the Earth. The magnetic poles are indicated by stars. The
blue lines show where the magnetic field dips into the Earth and the red lines show where
the magnetic field emerges from the Earth. Where the field lines are horizontal to the
Earth, between the red and blue lines, is the magnetic equator shaded yellow. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/earths-magnetic-lines/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "%Y.png"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,67 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Earth's Magnetic Field (compass needles)"
local Identifier = "noaa-sos-land-earths_magnetism_magnets"
local Description = [[ Earth is like a giant magnet with a North and South Pole. However,
the magnetic North and South Pole are not aligned with the Geographic North and South
Pole. The Geographic North Pole is defined by the latitude 90° N and is the axis of the
Earth's rotation. The Magnetic North Pole is where the Earth's magnetic field points
vertically downward. The Earth creates its own magnetic field from the electric currents
created in the liquid iron-nickel core. In order to illustrate the earth's magnetic
field, three datasets for Earth's Magnetism have been created. All of these datasets show
the changes in the magnetic field from 1590 - 2010. The first dataset shows the magnetic
field lines at the surface of the Earth. The magnetic poles are indicated by stars. The
blue lines show where the magnetic field dips into the Earth and the red lines show where
the magnetic field emerges from the Earth. Where the field lines are horizontal to the
Earth, between the red and blue lines, is the magnetic equator shaded yellow. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/earths-magnetic-field-compass-needles/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "%Y.png"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,63 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "ETOPO1: Topography and Bathymetry"
local Identifier = "noaa-sos-land-etopo1"
local Description = [[ ETOPO1 is a 1 arc-minute global relief model of Earth's surface
that integrates land topography and ocean bathymetry. It was built from numerous global
and regional data sets, and is available in "Ice Surface" (top of Antarctic and Greenland
ice sheets) and "Bedrock" (base of the ice sheets) versions. The "Ice Surface" version is
available for Science On a Sphere. This dataset is a higher resolution version of
ETOPO2, which is a 2 arc-minute global relief model of Earth's surface. An arc-minute is
1/60 of a degree. Scientists use high resolution maps like ETOPO1 to improve accuracy in
tsunami forecasting, modeling, and warnings, and also to enhance ocean circulation
modeling and Earth visualization. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/etopo1-topography-and-bathymetry/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.jpg",
Description = Description
}
local colorbar = {
Identifier = Identifier,
Name = Name,
Type = "ScreenSpaceImageLocal",
TexturePath = syncedDirectory .. "etopo1_color_scale.png",
FaceCamera = false,
Scale = 0.1,
CartesianPosition = { 0.5, 0.0, -2.0 }
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
openspace.addScreenSpaceRenderable(colorbar);
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
openspace.removeScreenSpaceRenderable(colorbar)
end)
asset.export(layer)
asset.export(colorbar)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,48 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "ETOPO2: Topography and Bathymetry (bright colors)"
local Identifier = "noaa-sos-land-etopo2-earth_bright"
local Description = [[ Many datasets have been created by utilizing the ETOPO2 dataset,
which was generated from digital databases of seafloor and land elevations on a 2-minute
latitude/longitude grid (1 minute of latitude = 1 nautical mile, or 1.15 statute miles).
The ETOPO2 is a combination of satellite altimetry observations, shipboard echo-sounding
measurements, data from the Digital Bathymetric Data Base Variable Resolution and data
from the GLOBE project which has a global digital elevation model. Earth Color Enhanced
uses green, yellow, orange, red and white to denote increasing elevation of the land. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-bright-colors/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "10800.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,48 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "ETOPO2: Topography and Bathymetry (color enhanced)"
local Identifier = "noaa-sos-land-etopo2-earth_color"
local Description = [[ Many datasets have been created by utilizing the ETOPO2 dataset,
which was generated from digital data bases of seafloor and land elevations on a 2-minute
latitude/longitude grid (1 minute of latitude = 1 nautical mile, or 1.15 statute mile).
The ETOPO2 is a combination of satellite altimetry observations, shipboard echo-sounding
measurements, data from the Digital Bathymetric Data Base Variable Resolution and data
from the GLOBE project which has a global digital elevation model. This dataset uses
green, yellow, orange, red and white to denote increasing elevation of the land. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-color-enhanced/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "7200.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,48 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "ETOPO2: Topography and Bathymetry (shaded colors)"
local Identifier = "noaa-sos-land-etopo2-earth_shaded"
local Description = [[ Many datasets have been created by utilizing the ETOPO2 dataset.
This dataset was generated from digital data bases of seafloor and land elevations on a
2-minute latitude/longitude grid (1 minute of latitude = 1 nautical mile, or 1.15 statute
mile). ETOPO2 is a combination of satellite altimetry observations, shipboard
echo-sounding measurements, data from the Digital Bathymetric Data Base Variable
Resolution and data from the GLOBE project which has a global digital elevation
model. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-shaded-colors/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "5400.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,51 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "ETOPO2: Topography and Bathymetry (natural colors)"
local Identifier = "noaa-sos-land-etopo2-earth_topo"
local Description = [[ Many datasets have been created by utilizing the ETOPO2 dataset,
which was generated from digital data bases of seafloor and land elevations on a 2-minute
latitude/longitude grid (1 minute of latitude = 1 nautical mile, or 1.15 statute mile).
The ETOPO2 is a combination of satellite altimetry observations, shipboard echo-sounding
measurements, data from the Digital Bathymetric Data Base Variable Resolution and data
from the GLOBE project which has a global digital elevation model. The topography and
bathymetry side of the Hot Topo dataset was created with this digital data base, as well
as the datasets EarthLiteColor, EarthOne, and Earth Land/Bathymetry. EarthOne and Earth
Land/Bathymetry are shaded in relatively true color, while Hot Topo and EarthLiteColor
use green, yellow, orange, red and white to denote increasing elevation of the land. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-natural-colors/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,47 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "ETOPO2: Bathymetry"
local Identifier = "noaa-sos-land-etopo2-landsat"
local Description = [[ Many datasets have been created by utilizing the ETOPO2 dataset,
which was generated from digital data bases of seafloor and land elevations on a 2-minute
latitude/longitude grid (1 minute of latitude = 1 nautical mile, or 1.15 statute mile).
The ETOPO2 is a combination of satellite altimetry observations, shipboard echo-sounding
measurements, data from the Digital Bathymetric Data Base Variable Resolution and data
from the GLOBE project which has a global digital elevation model. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-bathymetry/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local layer = {
Identifier = Identifier,
Name = Name,
FilePath = syncedDirectory .. "4096.jpg",
Description = Description
}
asset.onInitialize(function()
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

View File

@@ -0,0 +1,65 @@
local globeIdentifier = asset.require("../../earth").Earth.Identifier
local Name = "Fires - 2009"
local Identifier = "noaa-sos-land-fire"
local Description = [[ In order to monitor the fires occurring globally, a special sensor
has been mounted on the Terra and Aqua satellites. The sensor, named the Moderate
Resolution Imaging Spectroradiometer (MODIS), is able to provide daily satellite images
of the Earth's landmasses in near real-time using the MODIS Rapid Response System. There
are many uses for the data collected from MODIS, such as monitoring global fires by
detecting the abnormally high temperature anomalies at the surface. When a location is
much warmer than the surrounding area, it suggests the presence of a fire or a lava flow.
It is important to know the size, location and intensity of fires because of the damage
that they can cause, and also to help scientists understand the emissions from the fires
and their short- and long-term effects on ecosystems. ]]
local URL = "https://sos.noaa.gov/catalog/datasets/fires-2009/"
local syncedDirectory = asset.syncedResource({
Name = Name,
Type = "HttpSynchronization",
Identifier = Identifier,
Version = 1
})
local imagesDestination = syncedDirectory .. "images"
local layer = {
Identifier = Identifier,
Name = Name,
Type = "TemporalTileLayer",
Mode = "Folder",
Folder = {
Folder = imagesDestination,
-- See https://en.cppreference.com/w/cpp/io/manip/get_time for an explanation of the
-- time formatting string
Format = "firemap.%Y%j-%Y%j.4096x2048.png"
},
Description = Description
}
asset.onInitialize(function()
if not openspace.directoryExists(imagesDestination) then
openspace.printInfo("Extracting " .. Name)
openspace.unzipFile(syncedDirectory .. "4096.zip", imagesDestination, true)
end
openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.onDeinitialize(function()
openspace.globebrowsing.deleteLayer(globeIdentifier, "ColorLayers", layer)
end)
asset.export(layer)
asset.meta = {
Name = Name,
Version = "1.0",
Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration.",
Author = "National Oceanic and Atmospheric Administration",
URL = URL,
License = "https://sos.noaa.gov/copyright/"
}

Some files were not shown because too many files have changed in this diff Show More