co-maps/docs/STYLES.md
2025-11-22 13:58:55 +01:00

6.3 KiB

Map styling and icons

Here is the basic workflow to update styles:

  1. Edit the styles file you want, e.g. Roads.mapcss
  2. Rebuild the app or run the tools/unix/generate_drules.sh script
  3. Test how your changes look in the app
  4. Commit your edits
  5. Send a pull request!

Please prepend [styles] to your commit message and add Developers Certificate of Origin to it.

Please check a list of current styling issues and "icons" issues.

An overview of currently used icons can be found in the Wiki.

Requirements

To work with styles first clone the CoMaps repository.

Install a protobuf python package with pip

pip install "protobuf<3.21"

or with your OS package manager, e.g for Ubuntu

sudo apt install python3-protobuf 

To run the generate_symbols.sh script, you need to install optipng, e.g. for Ubuntu

sudo apt install optipng

If you use WSL on Windows 10 you might need to run X Server before running generate_symbols.sh

Files

Map styles are defined in text files located in data/styles/default/include/:

There is a separate set of these style files for the navigation mode in data/styles/vehicle/.

Icons are stored in data/styles/default/light/symbols/ and their dark/night counterparts are in data/styles/default/dark/symbols/.

How to add a new icon

  1. Add an svg icon to data/styles/default/light/symbols/ (and to dark too) preferably look for icons in collections CoMaps uses already
  2. Add icon rendering/visibility rules into data/styles/default/include/Icons.mapcss and to "navigation style" data/styles/vehicle/include/Icons.mapcss
  3. Rebuild the app
    • Or run tools/unix/generate_symbols.sh to add new icons into skin files and tools/unix/generate_drules.sh to generate drawing rules for the new icons
  4. Test your changes

How to add a new map feature / POI type

  1. Add it into data/mapcss-mapping.csv (or better replace existing deprecated line) to make CoMaps import it from OSM
  2. If necessary merge similar tags in via data/replaced_tags.txt
  3. Define a priority for the new feature type in e.g. priorities_4_overlays.prio.txt and/or other priorities files
  4. Add a new icon (see above) and/or other styling (area, line..)
  5. If a new POI should be OSM-addable/editable then add it to data/editor.config
  6. Add the English string (and optionally translations e.g. for your native language) into iOS and Android type strings e strings
  7. Add search keywords into data/categories.txt
  8. Add new or fix current classifier tests at generator/generator_tests/osm_type_tests.cpp if you can
  9. Test your changes
  10. Relax and wait for the next maps update :)

Testing your changes

The most convenient way is using the desktop app. (there is a "Designer" version of it also, which facilitates development by rebuilding styles and symbols quickly, but it's broken as of now, please help fix it!)

To test on Android or iOS device either re-build the app or put the compiled style files (e.g. drules_proto_default_light.bin) into a styles/ subfolder of maps directory on the device (e.g. Android/data/app.comaps/files/styles/).

Changing display zoom level for features (e.g. from z16- to z14-) might not take effect until map's visibility/scale index is rebuilt:

  1. Build the generator_tool binary
  2. Put a map file, e.g. Georgia.mwm into the data/ folder in the repository
  3. Run
../omim-build-release/generator_tool --generate_index=true --output="Georgia"
  1. The index of Georgia.mwm will be updated in place

A whole map needs to be regenerated for the changes to take effect if:

  • the visibility change crosses a geometry index boundary
  • e.g. area style rules are added for a feature that didn't have them before
  • a new feature type is added or the mapping of existing one is changed

Technical details

Map style files syntax is based on MapCSS/0.2, though the specification is not supported in full and there are CoMaps-specific extensions to it.

The tools/unix/generate_drules.sh script uses a customized version of Kothic stylesheet processor to compile MapCSS files into binary drawing rules files data/drules_proto*.bin. The processor also produces text versions of these files (data/drules_proto*.txt) to ease debugging.

The tools/unix/generate_symbols.sh script assembles all icons into skin files in various resolutions (data/resources-*/symbols.png and symbols.sdf).