Rendering of a map is the process of making a visual image on the basis of raw geospatial data and tags. The word often applies more specifically to the production of a raster image, or a set of raster tiles, but it can refer to output in a vector-based format. "3D rendering" is also possible taking map data as an input. The ability to render maps in new and interesting styles, or highlighting features of special interest, is one of the most exciting aspects having open access to geodata. Developers in and around the OpenStreetMap community have created a wide variety of software for rendering OpenStreetMap data. The data can also be converted to other data formats for use with existing rendering software.
The most obvious examples of rendering OpenStreetMap data, are those found on the openstreetmap.org homepage. Click the layer picker button on the right to switch between layers showing different rendering styles. There are several layers created using Mapnik software including the default 'Standard' layer. To understand more about the infrastructure involved in rendering and serving these tiles' map styles, see Component overview and Mapnik Rendering.
There are limitless dimensions of flexibility involved in rendering. Most rendering software supports some kind of stylesheet for controlling things like colour, line widths, text orientation, icons for points of interest, and many very subtle visual factors.
Name | Target platforms | Target languages | License | Notes |
---|---|---|---|---|
Carto | JavaScript | N/A | Apache v2 | convert CartoCSS style sheets into Mapnik's own XML styling language |
Mapnik | Windows, macOS, Linux | C++, JavaScript, Python, Ruby, Java | LGPL | The most popular server-side 2D map renderer. Requires PostgreSQL and various C++ libraries. Designed to be fast and is suitable for tile generation on high-end servers but it isn't particularly easy to set up. |
MapOSMatic | Cross-platform | Python | AGPLv3 | Can render maps with a grid and street index. Written in Python/Django + mapnik. |
Smrender | Cross-platform | C | GPLv3 | a rules-based rendering engine written in C |
TileServer GL | Cross-platform | BSD | Tile server for raster and vector tiles. | |
TileSweep | Linux, macOS | C, JSX | MIT | Tile server with prerendering using libmapnik. |
Map Machine | Cross-platform | Python | MIT | A simple renderer for OpenStreetMap with custom icons intended to display as many tags as possible. |
Name | Target platforms | License | Notes |
---|---|---|---|
Kendzi3d | Java SE | BSD | Plugin for JOSM, allows viewing of edited data in 3D |
Kosmtik | Node.js | WTFPL | CartoCSS style development tool (style preview) based on Mapnik. |
Maperitive | Windows, macOS, Linux | Proprietary | local file (.osm, .osm.bz2 and GPX) desktop rendering application, with rendering rules defined in a text file. Generates BMP, PNG and SVG output. Not designed for high performance rendering or huge volumes of data, but easy to set up and flexible, and a good option for one-off rendering (e.g. a map of your city). It also has a tile generator, hillshading, elevation colouring and lots of other features. |
OSM2World | Java SE | LGPL | Tool that creates 3D realistic models from OSM data files |
OSMBuildings | JavaSript (WebGL) | ... | Tool that creates 3D models from OSM data files |
OSM go | JavaScript | GPL | Tool that creates 3D simple models with selectable OSM-Objects from OSM data files |
Phototiler | Linux, macOS, Windows | Proprietary | A tool to create high quality maps using photo-realistic shading and vector tile data. |
TileMill | Windows, macOS, Linux | 3-clause BSD | development environment for CartoCSS styles |
Name | Target platforms | Target languages | License | Notes |
---|---|---|---|---|
Carto Mobile SDK | Android, iOS, Windows Phone | Java, Objective-C++, Swift, C# | BSD | Supports 3D city overlays, editable vector overlays and is highly customizable. |
CartoType | Windows, iOS, Android, macOS, Unix, Web Assembly | C++, C#, Java, Swift, Objective C | Proprietary | Rendering and routing library. Uses OpenGL ES hardware acceleration. Customizable style sheets and route profiles. Supports perspective and 3D buildings. |
GLMap | iOS, Android | Objective-C, Swift, Java | Proprietary | Offline or online vector map rendered on device using OpenGL ES |
libosmscout | Linux, macOS, iOS, Windows, Android, Qt | C++, Java | LGPL | Offers simple, high-level interfaces to offline rendering and routing functionalities based on OpenStreetMap data. |
Mapbox Android SDK | Android | Java | Proprietary (starting with v9.3.0)[1], BSD+JSON<[2] (earlier versions) | Displays Mapbox Vector Tiles in a slippy map using OpenGL ES. Open source fork continued by community as MapLibre GL Native. |
Mapbox GL JS | Web | JavaScript | Proprietary (starting with v2)[3], BSD (until v1.13) | Displays Mapbox Vector Tiles in a slippy map using WebGL. Open source fork continued by community as MapLibre GL JS. |
Mapbox iOS SDK | iOS | Objective-C, Swift, Interface Builder | Proprietary (starting with v5.10/6.0)[4], BSD+JSON[2] (earlier versions) | Displays Mapbox Vector Tiles in a slippy map using OpenGL ES. Open source fork continued by community as MapLibre GL Native. |
Mapbox macOS SDK | macOS | Objective-C, Swift, Interface Builder, AppleScript | BSD+JSON[2] | Displays Mapbox Vector Tiles in a slippy map using OpenGL |
Mapbox Qt SDK | Qt | C++ | BSD | Displays Mapbox Vector Tiles in a slippy map using OpenGL |
Mapbox Unity SDK | Cross-platform | C# | Apache/BSD | Provides data for generating custom 3D scenes in Unity |
MapLibre GL JS | Web | JavaScript | BSD | Community led fork derived from Mapbox GL JS v1.13 prior to their switch to a non-OSS license |
MapLibre GL Native | Android, iOS | Java, Objective-C, Swift, Interface Builder | BSD | Community led fork derived from Mapbox GL Native 1.6.0 prior to their switch to a non-OSS license |
Mapsforge | Android, Java ME | Java | LGPLv3 | free and open toolbox that enables the community to easily create new OpenStreetMap-based applications. Provided tools and APIs include solutions for map rendering, route planning and navigation, POI indexing and search, map overlays and more. |
MapTiler JavaScript Maps SDK | Web | JavaScript | BSD | Fork of MapLibre GL JS |
Tangram | Web | JavaScript | MIT | 2D and 3D map renderer using WebGL |
Tangram ES | Android, iOS, Linux, macOS | C++ | MIT | 2D and 3D map renderer using OpenGL ES |
Prettymaps | Cross-platform | Python | GNU AGPLv3 | 2D raster and vector graphics rendering using Python. Based on osmnx, matplotlib and shapely libraries. |
The following renderers are no longer maintained but are of historical interest: