An OpenGL renderer for Mapbox vector tiles, implemented in C++11, currently targeting iOS, OS X, and Ubuntu Linux.
- Modern C++ compiler that supports
-std=c++11
(On OS X clang++, on Linux g++-4.8 or g++-4.9) - Boost headers
libpng
libuv
glfw3
libcurl
(depends on OpenSSL; Linux only)libboost_regex
(Linux only)- Apple Command Line Tools (for build on OS X; available at Apple Developer)
- Homebrew (for build on OS X)
- Python 2.x (for build only)
- Node.js (for build only)
We use mapnik-packaging to build static libraries of dependencies.
First off: if you hit problems during development try:
make clean
This will clear cached build data and update to the latest versions of dependencies.
The demo applications use Mapbox vector tiles, which require a Mapbox account and API access token. Obtain an access token on the Mapbox account page.
For iOS and OS X use of the demo apps in Xcode, setup the access token by editing the scheme for the application target, then adding an environment variable with the name MAPBOX_ACCESS_TOKEN
.
Run:
make setup
This downloads all required dependencies, builds them and creates universal libraries that can be used on both OS X and iOS.
To create projects, you can run:
make xproj
: Creates an Xcode project with OS X-specific handlers for HTTP downloads and settings storage. It uses GLFW for window handling.make lproj
: Creates an Xcode project with platform-independent handlers for downloads and settings storage. This is what is also being built on Linux.make linux
: Builds the Linux GLFW application withmake
.
iOS makes use of a Cocoa-specific API called mapbox-gl-cocoa,
which is included as a submodule and provides a UIView
interface to the map view and some bundle resources.
First, pull down the submodule(s):
git submodule init
git submodule update
Then run:
make setup
This downloads all required dependencies, builds them and creates universal libraries that can be used on both OS X and iOS.
Lastly, make iproj
to create and open an Xcode project with an iOS-specific view controller housing.
Target devices: iPhone 4 and above (4S, 5, 5c, 5s) and iPad 2 and above (3, 4, mini and/or retina).
Set the environment variable MAPBOX_ACCESS_TOKEN
to your token.
Ensure you have git and other build essentials:
sudo apt-get update
sudo apt-get install git build-essential zlib1g-dev automake libtool xutils-dev make cmake pkg-config nodejs-legacy curl
Install a -std=c++11
capable compiler
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8
Install glfw3 dependencies:
sudo apt-get install libxi-dev libglu1-mesa-dev x11proto-randr-dev x11proto-xext-dev libxrandr-dev x11proto-xf86vidmode-dev libxxf86vm-dev libxcursor-dev
Then run:
make setup
This downloads all required dependencies, builds them and creates universal libraries that can be used on both OS X and iOS.
You can then proceed to build the library like:
make linux
The default stylesheet at bin/style.js
is JSON and is processed into a minified version by the following script:
node bin/build-style.js bin/style.js out/
Note: This is automatically taken care of as a build phase so you are not expected to do this manually.
- Press
X
to reset the transform - Press
N
to reset north - Press
R
to toggle styles - Press
Tab
to toggle debug information - Press
Esc
to quit
- Pan to move
- Pinch to zoom
- Use two fingers to rotate
- Double-tap to zoom in one level
- Two-finger single-tap to zoom out one level
- Single-tap to toggle the command palette visibility for resetting north & the transform, toggling debug, toggling styles, and locating the user
- Double-tap, long-pressing the second, then pan up and down to "quick zoom" (iPhone only, meant for one-handed use)
Under early development, this project was called LLMR (Low-Level Map Renderer), in case you see any lingering references to it.