Dan Krusi edited this page Aug 7, 2014 · 24 revisions



The Optimal Lunar Landing Analysis software is part of the NASA International Space Apps Challege, and serves as a platform for processing lunar data in order to find optimal landing sites for spacecrafts.

The idea is to create an extensible framework for which multiple data sets are used by a series of analysis strategies to come up with a good landing solution while providing strong visual feedback mechanisms for both the strategy development phase and the strategy analysis phase.

So far two data sources have been implemented and five analysis strategies, as well as a robust GUI and viewport.


  • Cross-platform (Linux, OS X, Windows)
  • Automatic tiling engine
  • Map abstraction
  • Responsive user interface with support for 3D acceleration
  • Easily extensible
  • Multi-threaded computation


The Optimal Lunar Landing Analysis software is built ontop of two main concepts: Data Maps and Analysis Maps. Data Maps provide sources of information for performing analysis on. Further reading can be found on the following pages:

  • [Data Maps](wiki/Data Maps)
  • [Analysis Maps](wiki/Analysis Maps)

Build Instructions


  • Install the Qt SDK (sudo aptitude install qt-sdk qt-creator)
  • Run qmake && make


  • Install the Qt SDK from [http://qt-project.org/downloads]
  • Open the .pro project file with QT Creator and press Run


  • Install the Qt SDK from [http://qt-project.org/downloads]
  • Run qmake && make

Getting Started

  • Run the application OptimalLunarLandingAnalysis from the bin directory.
  • From the File menu, select Open Map... and find the .map file under the maps directory.
  • The first time a map is loaded, the framework needs to pre-calculate some data and create all the tiles. Depending on the map size, this can take a while.
  • Use the mouse to pan the map, and the zoom controls to zoom in/out. See how the tiles are loaded on the fly as needed.
  • Select the Slope Analysis map to see an example implementation overlay.
  • Implement your own strategy by extending the class AnalysisMap:
class ElevationAnalysisMap : public AnalysisMap
    ElevationDataMap *_elevationMap;

    explicit ElevationAnalysisMap(ElevationDataMap *elevationMap, QSettings *settings, QObject *parent = 0) {
        // Init
        _name = "Elevation Analysis";
        _elevationMap = elevationMap;

    virtual double calculateScoreForPoint(int x, int y) {
        // Really trivial implementation: the higher the better...
        int elevation = _elevationMap->getElevationAtPoint(x,y);
        int minElevation = -9150;
        int maxElevation = 10760;
        return (double)(elevation - minElevation) / (double)(maxElevation - minElevation);


###Linux Screenshot Screenshot Screenshot Screenshot

###Windows Screenshot

###OS X Screenshot

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.