Altus Mapping Engine Overview
In a nutshell, Altus is a sophisticated resource management and rendering engine designed to harness the power of GPUs. The Altus Mapping Engine strives for efficient client-side rendering performance and world-wide coverage.
In some respects, Altus is similar to a game engine. In fact, our founders have a long history in games and graphics having worked at places like Epic, RedStorm, Ubisoft on AAA video game engines and having worked at Microsoft on the DirectX team.
Unlike a game engine, Altus is designed to not take over an entire machine's resources. In fact, Altus has a power-saving mode, in which it will consume practically no CPU or GPU time, but will become active the instant the user needs it.
That's why we call it a "Mapping Engine". And, we believe, we coined the term "mapping engine" 4 years before it was popular when we did the very first tablet-based synthetic vision systems for the original iPad.
The basic architecture of Altus looks like this:
- A portable engine core (written in C++ and in some cases assembler) which:
- Controls the GPU
- Manages shaders, textures, geometry, and drawing passes
- Uses a "least-recently-used" cache architecture
- The portable engine core is controlled by an API layer that is platform and language specific. The API layer is:
- Objective C on iOS
- Java on Android
- C# on Windows 8
The core C++ code is identical on all platforms, and the engine capabilities are identical on all platforms. However, there are some minor differences in the APIs subject to the nuances and limitation of the target platform. In addition, while there is complete API exposure in iOS, other APIs may need extension. For example, there has been far less demand for the Windows 8 version of Altus. We have exposed all of the APIs our clients have needed to date. If you need an API exposed, please let us know.
The engine core is designed to consume a variety of data sources:
- Common data like raster tiles from a web server
- Uncommon data like GRIB2 4 dimensional weather data
- Altus-specific data like terrain, map packages, clustered marker maps, and data from Altus Server components
- Your data via a level of indirection we called the "Tile Provider" system.
In fact, one of our philosophies is to stay 'out' of the data format game as much as possible. The only reason we have anything Altus-specific is either because a) the common format is inefficient (i.e. JSON vector data is bloated) or because we could get better performance on a specific device or OS with a custom format.
On the server side, portions of the portable core of Altus are also present in Altus Server, which is a collection of tools for creating data from your other other data sources in the form of:
- Raster tiles from AltusRaster
- Vector data from AltusVector which consumes data from PostGIS
- Terrain data from AltusTerrain which consume data form any common terrain format
- Clustered marker data form AltusMarker which consumes data from your pipeline in the form of tab delimited files or SQLite files
- Weather data from AltusWeather which consumes data from a variety of common weather formats like GRIB2
- Offline Packages from AltusPackage, which can make offline versions of all the streaming data from the other server components (the engine also has package management built in)