This site is the home for the WorldWind Explorer web app, the WorldWindJS library–a community edition of NASA Web WorldWind, and the WorldWind Java-Community Edition SDK–a fork of NASA WorldWind Java, plus other WorldWind programming resources.

Table of Contents


WorldWind Explorer

The Explorer is an HTML5/JavaScript geo-browser powered by WorldWindJS and the Knockout and Bootstrap libraries. It is implemented as a single-page web application (SPA) using JQuery to dynamically load content.

Overview

The WorldWind Explorer is a geospatial web application for visualizing Earth. It uses the WorldWindJS library (forked from the NASA WebWorldWind SDK) to display a 3D globe with terrain and imagery as well as 2D maps. It displays the sunrise and sunset times and solar angles for any point on the earth. It shows the terrain’s aspect and slope for any location. It features user-defined markers and point weather forecasts. It has a search feature to find places.

Resources


WorldWindJS Library (Web WorldWind - Community Edition)

WorldWindJS is a fork of the popular Web WorldWind library from NASA (with contributions from ESA). This fork provides a release channel for builds based on the latest fixes and features from the WebWorldWind develop branch integrated with several enhancements from the WorldWind community. WorldWindJS is a drop-in replacement for the NASA Web WorldWind library.

WorldWindJS releases can be downloaded from GitHub or from npm. Of course, you can fork or clone this project and build the library yourself using the instructions in the README.

Quick Start

Do you want to start developing right away?

React

Are you interested in building a WorldWindJS geo-browser or embedding a globe in a web page using React? Checkout these resources:

Example Applications

Here some examples of applications built with WorldWindJS:

How to Build a WorldWindJS Web App

This tutorial shows you how to build a WorldWindJS web app using Bootstrap and Knockout. You will build a feature-rich, responsive, customizable web app ready to be deployed to your site. This tutorial demonstrates:

This is what we will build:

Tutorial

Let’s begin!

Sample Application

Here is a feature-rich worldwind-web-app template for quickly building a web app using the WorldWindJS library with Bootstrap and KnockoutJS. Simply fork/clone the project and publish to gh-pages.

Simple Example

A very simple example showing to embed a WorldWind globe into a web page.


WorldWindJava - Community Edition

WorldWindJava Community Edition (WWJ-CE) is a community supported fork of the NASA WorldWind Java SDK. It is hosted at https://github.com/WorldWindEarth along with other WorldWind-based projects. WWJ-CE seeks to mitigate the effects of the suspension and continue the development of WorldWind Java. Pull requests are accepted.


WorldWindAndroid - Community Edition

WorldWindAndroid Community Edition (WWA-CE) is a community supported fork of the NASA WorldWind Android SDK. Like the WWJ-CA, WWA-CE is also hosted at https://github.com/WorldWindEarth. WWA-CE seeks to mitigate the effects of the suspension and continue the development of WorldWind Android. Pull requests are accepted.


WorldWind Resources

Setup Your Own WorldWind Servers

Data Sources for Elevations


NASA WorldWind Project Suspension

NASA announced a impending shutdown on March 8, 2019:

WorldWind team would like to inform you that starting May 3, 2019, NASA WorldWind project will be suspended.

All the WorldWind servers providing elevation and imagery will be unavailable. While you can still download the SDKs from GitHub, there will be no technical support. If you have questions and/or concerns, please feel free to email at: worldwind-info@lists.nasa.gov

WebWorldWind

Here is important information for mitigating issues caused by the shutdown in NASA Web WorldWind SDK based applications. The ramifications of the suspension are severe, including:

Alternatives to files.worldwind.arc.nasa.gov

If the files.worldwind.arc.nasa.gov service is offline, an alternative source for the ‘worldwind.js’ library is required.

Use the WorldWindJS library

The WorldWindJS library is designed as a drop in replacement for worldwind.js (and worldwind.min.js). Here are two implementations for using WorldWindJS.

For npm based applications: change the @nasaworldwind/worldwind dependency to worldwindjs. For example:

Example: Original package.json

  "dependencies": {
    "@nasaworldwind/worldwind": "^0.9.0"
  },

Example: New package.json

  "dependencies": {
    "worldwindjs": "^1.7.0"
  },

For scripts: change the src from files.worldwind…worldwind.js to WorldWindJS’ npm-based CDN at unpkg.com:

Example: Old script element, using files.worldwind.arc.nasa.gov

<script src="https://files.worldwind.arc.nasa.gov/artifactory/web/0.9.0/worldwind.min.js"></script>

Example: New script element, using WorldWindJS at unpkg.com

<script src="https://unpkg.com/worldwindjs@1.7.0/build/dist/worldwind.min.js"></script>

Use NASA’s WorldWind library from a CDN

Change script element’s src from files.worldwind to the npm-based CDN at unpkg.com :

Example: Old script element, using files.worldwind.arc.nasa.gov

<script src="https://files.worldwind.arc.nasa.gov/artifactory/web/0.9.0/worldwind.min.js"></script>

Example: New script element, using unpkg.com

<script src="https://unpkg.com/@nasaworldwind/worldwind@0.9.0/build/dist/worldwind.min.js"></script>

Use the Web WorldWind source code

Deploy the Web WorldWind source code, either directly or in compiled form, to your web server. This solution is the most flexible as it provides the capability to customize the sources for resources, imagery and elevations, and it ensures any changes at NASA or WorldWind Earth do not have a direct affect your project’s runtime.


Alternatives to using WorldWind Elevations

I have an alternative server for NASA elevations (from worldwind26.arc.nasa.gov/elev) staged for production should the WorldWind shutdown become a reality. I will make this server available if needed.

Use the WorldWindJS library

The WorldWindJS library v2.0 (to-be-released) does not have dependencies on the NASA elevation services. I have been beta-testing the serving of application/bil elevations from my own servers (which I pay for out of pocket). If/when a shutdown becomes imminent I will transition WorldWindJS to use my servers.

Build your own elevation server

Change the source to use other elevation services

Here’s an example for using alternative elevation services. In this example, two custom elevation coverages are defined, a custom elevation model is then defined, and finally, the WorldWindow is configured with the custom elevation model.

Example: a custom GEBCO elevation coverage class:

/**
 * @exports MyGebcoElevationCoverage
 */
define(['worldwind'],
    function (WorldWind) {
        "use strict";

        /**
         * Constructs an Earth elevation coverage using GEBCO data.
         * @alias MyGebcoElevationCoverage
         * @constructor
         * @augments TiledElevationCoverage
         * @classdesc Provides elevations for Earth. Elevations are drawn from the custom elevation service.
         */
        var MyGebcoElevationCoverage = function () {
            WorldWind.TiledElevationCoverage.call(this, {
                coverageSector: WorldWind.Sector.FULL_SPHERE,
                resolution: 0.008333333333333,
                retrievalImageFormat: "application/bil16",
                minElevation: -11000,
                maxElevation: 8850,
                urlBuilder: new WorldWind.WmsUrlBuilder("https://mapserver.somewhere.net/elev", "gebco", "", "1.3.0")
            });

            this.displayName = "GEBCO Earth Elevation Coverage";
        };

        MyGebcoElevationCoverage.prototype = Object.create(WorldWind.TiledElevationCoverage.prototype);

        return MyGebcoElevationCoverage;
    });

Example: a custom SRTM elevation coverage class:

/**
 * @exports MySrtmElevationCoverage
 */
define(['worldwind'],
    function (WorldWind) {
        "use strict";

        /**
         * Constructs an Earth elevation coverage using CGIAR SRTM data.
         * @alias MySrtmElevationCoverage
         * @constructor
         * @augments TiledElevationCoverage
         * @classdesc Provides elevations for Earth. Elevations are drawn from the custom elevation service.
         */
        var MySrtmElevationCoverage = function () {
            WorldWind.TiledElevationCoverage.call(this, {
                coverageSector: new WorldWind.Sector(-60, 60, -180, 180),
                resolution: 0.000833333333333,
                retrievalImageFormat: "application/bil16",
                minElevation: -11000,
                maxElevation: 8850,
                urlBuilder: new WorldWind.WmsUrlBuilder("https://mapserver.somewhere.net/elev", "srtm-cgiar", "", "1.3.0")
            });

            this.displayName = "SRTM-CGIAR Earth Elevation Coverage";
        };

        MySrtmElevationCoverage.prototype = Object.create(WorldWind.TiledElevationCoverage.prototype);

        return MySrtmElevationCoverage;
    });

Example: a custom elevation model class that uses the custom coverages:

/**
 * @exports MyElevationModel
 */
define([
        'model/globe/elevations/MyGebcoElevationCoverage',
        'model/globe/elevations/MySrtmElevationCoverage',
        'worldwind'
    ],
    function (MyGebcoElevationCoverage,
              MySrtmElevationCoverage,
              WorldWind) {
        "use strict";

        /**
         * Constructs an MyElevationModel consisting of two elevation coverages GEBCO, SRTM.
         * @alias MyElevationModel
         * @constructor
         */
        var MyElevationModel = function () {
            WorldWind.ElevationModel.call(this);

            this.addCoverage(new MyGebcoElevationCoverage());
            this.addCoverage(new MySrtmElevationCoverage());
        };

        MyElevationModel.prototype = Object.create(WorldWind.ElevationModel.prototype);

        return MyElevationModel;
    });

Example: the function for creating a WorldWindow with the custom elevation model:

var wwd = new WorldWind.WorldWindow("globe-canvas", new MyElevationModel());

Alternatives to using WorldWind Imagery

I have an alternative server for NASA core imagery (from worldwind25.arc.nasa.gov/wms) staged for production should the WorldWind shutdown become a reality. I will make this server available if needed.

Use the WorldWindJS library

The WorldWindJS library v2.0 (to-be-released) will not have dependencies on the NASA imagery services. I have been beta-testing the serving of Blue Marble and Landsate imagery from own servers (which I pay for out of pocket). If/when a shutdown becomes imminent I will transition WorldWindJS to use my servers.

TODO

Change the source to use other imagery services

TODO

Build your own imagery server

TODO

WorldWindJava

I have alternative servers for NASA core imagery (from worldwind25.arc.nasa.gov/wms) and NASA elevations (from worldwind26.arc.nasa.gov/elev) staged for production should the WorldWind shutdown become a reality. I will make these servers available if needed.

To leverage these servers, you will need to alter the URLs in the src/config/config.Earthfolder.

WorldWindAndroid

TODO


About

WorldWindEarth, WorldWindJS and the Explorer are personal projects of Bruce Schubert. I am a software engineer on the NASA WorldWind team, but these projects are built and maintained in my spare time.