OpenStreetMap Renderer: Cobra
!! Note that Cobra development process is paused until OSM API v0.6 is released and in use. !!
(For information about the CobraNG successor check this page: [])
Cobra is a small rendering framework for OpenStreetMap written in C# (.NET). It consists of a core component (including graphical and commandline user interface) and provides a interface for plugins to do actual rendering. Cobra plugins a characterized into three different domains:
- Projection Providers - are responsible for converting lat/lon coordinates into screen space.
- Style Providers - are responsible for providing the map style. This include decisions about the questions "when to draw?" and "how to draw?".
- Output Providers - are responsible for actually drawing map primitives to a specific image file format.
The current version of cobra (0.4.0) includes:
- Osmarender compatible Projection Provider
- Osmarender Style Provider
- Proprietary rule based Style Provider
- Proprietary hard coded Style Provider
- PNG Output Provider (using AGG (agg-sharp))
- SVG Output Provider
To run Cobra you need a .NET capable platform.
|Windows||Mono 2.0+||PNGoAGG: 0.4.1+|
|Linux||Mono||GUI has strange behaviour, PNG output is black|
|Mac||Mono||not tested, probably same as Linux/Mono|
Using */Mono you likely will notice some deficiencies. (e.g. strange behaviours when using GUI) Hopefully these glitches can be addressed in a later (platform interoperability concerned) release.
Version 0.3.1 introduces a new application structure. This means that cobra isn't available as a single application anymore. Instead there will be an application core which includes interconnection stuff, services, gui and commandline interface. The other parts are provided by three types of plugins (Output, Interpreter, Projection) which should be usable in any combination among each other. (There may be a dependency between interpreter-rulefile parameters and projection, though)
|Output Provider||Style Provider||Projection Provider|
|Bundle||Core||PNGoAGG Ouput Provider||SVG Output Provider||PNGoCairo Ouput Provider||Cobra Native Style Provider||Osmarender Style Provider||Quick Style Provider||Osmarender Projection Provider|
Area of Munich. Zoom 14-16 rendered with Cobra 0.3.9 rc1.
- Basic Map (Highways, Buildings, Forests, Railways, Waterways)
- maxspeed (fine coloured lines)(speedranges for colouring: < 20 , >=20 - <=30 , >30 - <60 , >=60 - <= 80 [kph])
- access (semi transparent coloured overlays)(Red: access:no/private on highways service+ or access/motorcar:no/private on tracks/paths , Blue: access:destination, Green: access:permissive)
- maxheight, maxwidth (nodes only)
- maxweight (ways only) (rendering of maxweight values failed. this will be fixed later)
Note: All map tiles were rendered one by one and each tile [data] for zoom 14 was downloaded via api just in time (which took about 90% of rendering time). As a result there are several graphical glitches like inclomplete place captions, where a nearby place node in a neighbour tile was not downloaded for the current tile.
weitere Wünsche und Anregungen sind natürlich jederzeit willkommen.
Core - 0.4.0
- Fixed and improved some issues in GUI.
PNGoAGG Ouput Provider - 0.4.4
SVG Output Provider - 0.2.8
- Improved Output Providers. Results should be approximately equal. (Except known limitations of PNG Output Provider)
Cobra Native Style Provider - 0.2.8
Osmarender Style Provider - 0.2.1
- Added proper handling of default fill colors. (fixed Cobra rules and Style Providers)
Cobra - 0.3.9
- 0000051: [Task] Auto calculate image width in respect of tile size at same zoomlevel (Ferdi) - resolved.
- 0000048: [Task] Add support for data boundary check (Ferdi) - resolved.
- 0000041: [Task] Optimize osm data loader (Ferdi) - resolved.
- 0000045: [Task] Add Multitileset Rendering Mode (Ferdi) - resolved.
- 0000044: [Task] Add support for multiple Datasources (Ferdi) - resolved.
- 0000043: [Task] Improve label positioning (Ferdi) - resolved.
- 0000037: [Task] Replace or extend the global Virtual Way approach with a local solution (Ferdi) - resolved.
- switched to new plugin structure
- Due to some changes to the osmarender rule format (and render logic), the current version of osmarender style provider plugin is stated as a interim solution. (The changes i had to make to get the new osmarender rules working decreased the rule processing performance a lot!!)
- The new internal model for symbols is SVG. There are some restrictions, though.
- Only a small part of the SVG standard is implemented.
- Even this subset is still erroneous in current release. (e.g. complex transformations)
- With version 0.3.9 the underlaying structure of Cobra is in a final state. All further development time will be spend on new features and bugfixes.
Cobra - 0.3.5
- 0000035: [Task] Add maxzoom for tileset rendering (Ferdi) - resolved.
- 0000034: [Task] Add support for different distance units. (Ferdi) - resolved.
- 0000031: [Task] Save tileset tiles in common used path structure (Ferdi) - resolved.
- 0000030: [Task] Add plugin configuration abilities for all plugin types (Ferdi) - resolved.
- 0000028: [Bug Report - Core] Enable virtual ways - Flag is not saved to project file (Ferdi) - resolved.
- 0000026: [Bug Report - GUI] Rulefile is always set to default value when editing a project (Ferdi) - resolved.
Native Rule Interpreter - 0.2.5
- 0000027: [Task] Improve SVG Symbol Parser (Ferdi) - resolved.
- 0000020: [Task] Create missing rules for zoom 15 (Ferdi) - resolved.
- 0000021: [Task] Create missing rules for zoom 16 (Ferdi) - resolved.
Cobra - 0.3.2
- 0000025: [Bug Report - GUI] Missing file selection dialog for rulefile (Ferdi) - resolved.
- 0000024: [Bug Report - GUI] Selecting SVG Renderer crashes application (Ferdi) - resolved.
Cobra - 0.3.1
- 0000002: [Feature Request] Rebuild whole application structure (Ferdi) - resolved.
- 0000015: [Task] Extend cobra symbol specification. (Ferdi) - resolved.
- 0000010: [Task] Impove GUI (Ferdi) - resolved.
- 0000012: [Feature Request] Get tile coordinates (x/y/z) from permalink (Ferdi) - resolved.
- 0000011: [Task] Fix symbol rendering workarounds (Ferdi) - resolved.
- 0000004: [Feature Request] Provide more advanced bug tracking capabilities (Ferdi) - resolved.
Native Rule Interpreter - 0.2.0
- 0000014: [Task] Add svg symbol support (Ferdi) - resolved.
PNGoAGG Output Provider - 0.4.0
- 0000023: [Bug Report] Tileset mode crashes after 8-10 tiles (Ferdi) - resolved.
- 0000016: [Task] Support extended cobra symbol specification (Ferdi) - resolved.
Report Bug / Request Feature
Q: What are Virtual Ways?
A: Virtual Ways are an obsolete concept of optimizing rendering of street names.
Q: Are there any plans to make the source code public?
A: Yes and No. There are plans to give away development of SVG Output and Osmarender Interpreter plugins to anyone who is interested. The Core and the basic plugins PNGoAGG Output, Native Rule Interpreter and Osmarender Projection will remain in my hands for now. To help people with developing own plugins (or UIs) i will provide an SDK soon.