Prior to the rendering process with the Mapsforge writer some preprocessing is essential:

  • to work arround bugs with Mapsforge
  • to simplify osm-structure (unifying sac:scale,dav:scale;via_ferrata eg)
  • eliminating mass tagging (remove trees except under certain conditions)
  • remove some redundant tags (cycle nodes with additional tags covering the basic information)
  • aso…

The tool for this task: tag-transform

Its cappable to transform NODES, WAYS and RELATIONS (it cannot RESOLVE Relations in any way) in a most powerfull way.
The possibilitys of this tool are endless, however its not that easy to understand how it works and to ride this horse propper.




For maps from 28th of  August 2019:

catching man_made=water_tap as drinking water

For maps from 28th of  February 2019:

added some transformations for designation/permissive foot/bicycle


For maps from 10th of  October 2018:

added some transforms for cycleway lanes/tracks



For maps from 29th of  July 2018:

handle cycle lanes and tracks on oneway=yes
oneway=yes and oneway:bicycle=no will still result in cw_lane_both | cw_track_both
oneway=yes w/o oneway:bicycle=no will result in cw_lane_oneway | cw_track_oneway = NEW TAGS !!


For maps from 3rd of  January 2018:

Bugfix: generator:source=* again in maps


For maps from 26th of  December 2017:

value:permit was transformed from key:foot|bicycle to key:access so far
NEW: value:permit stays with key:foot|bicycle|access and have to be handled in theme seperate.


new tagmapping for key:foot|bicycle|access



For maps from 3rd of  December 2017:

allow numeric values for:

(+ some additional values for safety_rope)

<!– tags_alpine –>
<osm-tag key=‘safety_rope’ value=‘sr_yes’ equivalent-values=’yes’ zoom-appear=’15’ />
<osm-tag key=‘ladder’ value=‘ld_yes’ equivalent-values=’yes’ zoom-appear=’15’ />
<osm-tag key=‘rungs’ value=‘rn_yes’ equivalent-values=’yes’ zoom-appear=’15’ />




For maps from 19th of  November 2017:

added mines (Tag= „adit“) and military=bunker , both ways and nodes
with special focus at abandoned/disused ones
Please take a look at TagTransform page for rules

<osm-tag key=’military‘ value=’bunker‘ zoom-appear=’15‘ />
<osm-tag key=’military‘ value=’bunker_disused‘ zoom-appear=’15‘ />
<osm-tag key=’man_made‘ value=’adit‘ zoom-appear=’15‘ />
<osm-tag key=’man_made‘ value=’adit_disused‘ zoom-appear=’15‘ />

TagTRansform rules for identifiying the disused adits/mines/bunkers



For maps from 6th of October:

transform name:zh_pinyin=* TO name:zhp=*
‚cause Mapsforge language switcher does’nt work with „zh_pinyin“


For maps from 24th of September:


place=island, place=islet and place=archipelago: for these areas (Multipolys) the center is calculated an a Node with the name/label ist created and set at the center of the MP. This is a huge improvement for maps with lots of islands. Thanks to @JohnPercy for this idea.


Clear abandoned:landuse=* to landuse=* PLUS abandoned=yes
Reason: eg. quarrys and cemetrys will exist for many centurys even when disuses/abandoned.

Transform disused:building=* to building=yes cause these buildings still exist.

Removed raw_sac_scale
Removed class:bicycle:*=*
Removed noexit
Removed incline_dir
Reason: Only 15 Tags are allowed for one object in Mapsforge – if exeeded the object is skipped and the whole map tile where this object resists too!

### Changed rule:

no longer force

Force of „via_ferrata_flag=yes“ stays at it is.

So new rule is:
Note: via_ferrata_scale=0 does’nt force via_ferrata_flag=set



For maps from 1st of August:

There are important changes in both tagmapping and tagtransform concerning sac_scale (click)


For maps from 1st of  July 2017:

removed sac_scale from ways tagged as highway=track
sac_scale on tracks doesnt add much information for users and occuopies 1 slot in limited tagspace for objects.


For maps from 1st of  June 2017:

Cleanup for more efficient seach in POI places (Citys, towns,…)

move opengeodb:population und :post_codes to approbriate OSM-Tags
delete opengeodb:* tags
delete „is_in“ Tag (you never find a major city of a district/county with this tag cause all villages within the county will have the capital in the is_in tag)

transformed landuse=wood to natural=wood


For maps from 4th of  March 2017:

access=permit + access=licence + foot=permit
transformed to access=permit


For maps from 20th of  December 2016:

Changes for cycleway track/lanes
.. cause there are roads with a cycleway=track PLUS cycleway=lane

  • cycleway:right=track transformed to cycleway_track=cw_track_right
  • cycleway:left=track transformed to cycleway_track=cw_track_left
  • cycleway=track now transformed to cycleway_track=cw_track_both
  • cycleway:right=lane transformed to cycleway_lane=cw_lane_right
  • cycleway:left=lane transformed to cycleway_lane=cw_lane_left
  • cycleway=lane now transformed to cycleway_lane=cw_lane_both


For maps from 1st of  December 2016:


  • cycleway:right=track transformed to cycleway=cw_track_right
  • cycleway:left=track transformed to cycleway=cw_track_left

Changed Tag:

  • cycleway=track now transformed to cycleway=cw_track_both


For maps from 11th of  November 2016:


  • cycleway:right=lane transformed to cycleway=cw_lane_right
  • cycleway:left=lane transformed to cycleway=cw_lane_left

Changed Tag:

  • cycleway=lane now transformed to cycleway=cw_lane_both


For maps from 10th of Oktober 2016:

Abreviations for streetnames for improved rendering on device
(Names in mapsforge are only rendered if street name fit straight way segment so: the shorter the name the more likely its rendered on screen)
Thanks to John Percy for this great idea!

#Platz -> Pl.
#Strasse -> Str.
#Straße – > Str.
#.*gasse -> g.

#Boulevard -> Bvd
#Highway -> Hwy
#Square -> Sq
#Street -> St
#Drive -> Dr
#Avenue -> Av
#Road ->
#Close -> Cl
#Court -> Ct
#East -> E
#West -> W
#North -> N
#South -> S
#Lane -> Ln

#Avenida -> Av.
#Camino -> Cno.
#Carretera -> Ctra.
#Plaza -> Pl.
#Calle -> C/
#Carrer -> c/

#Allée -> All.
#Avenue -> Av.
#Boulevard -> Bd.
#Place -> Pl.
#Ruelle -> RLE

#Straat -> str.


For maps from 8th of July 2016:

seperate hot_springs from natural=spring:


For maps from 1st of May 2016:

  • unified natural/place for labels

Several minor improvements


For maps from 8th of December 2015:

  • added oneway:bicycle=no transformed to oneway:bicycle=ow_bic_no incl. cycleway=opposite, cycleway=opposite_track  cycleway=opposite_lane

This indicates oneways where where bicycles are allowed to travel in the opposite direction



For maps from 20th of September 2015:

  • added poly_Labels (Names) for natural=mountain_range and natural=mountain_area


For maps from 1st of September 2015:

– added: class_bicycle_mtb
Tagtransformed from class:bicycle:mtb

values tansformed from

  • -3 to cbmtb-3
  • -2 to cbmtb-2
  • -1 to cbmtb-1
  • -0|0|+0 to cbmtb+0
  • 1|+1 to cbmtb+1
  • 2|+2 to cbmtb+2
  • 3|+3 to cbmtb+3

Ann: I like the idea of the class:bicycle, however only a very few roads are tagged so at now its completely useless for common use.
So the support for this tag is intended for mappers, using the Openandromaps with their own custom themes as a base to further add this tag to OSM database.
If this is’nt done I will stop supporting this tag.


For maps from 15th of June 2015:

Bugfix for natural=trees
These nodes were deleted so far if they don’t contain additional tags.
If a node in a MultiPolygon contained such a tree at the connection beteween two members of the MP the MP brocke.

Now the node is preserved, only the tag natural=tree is deleted FROM the node.
Thanks a lot to Richard who reported this issue and helped to identify of the Bug.

New rule for deleting simple trees:


For maps from 6th of May 2015:

Again changed the algorithm for cycleways with bicycle=yes:



For maps from 4th of May 2015:

– changed making of network=hcw
I excludes paths tagged with mtb:scale, bad visibility, bad surface from ordinary cycleways


For maps from 19th of April 2015:

-added  : New handling of relations with type=boundary cause Mapsforge only resolves relations with type=multipolygon


For maps from 13th of March 2015:

-added  :


For maps from 21st of December 2014:

-added  :


For maps from 18th of October 2014:

– added: class_bicycle_road
Tagtransformed from class:bicycle(:roadcycling|roadbike|touring|commute)

values tansformed from

  • -3 to cbr-3
  • -2 to cbr-2
  • -1 to cbr-1
  • -0|0|+0 to cbr+0
  • 1|+1 to cbr+1
  • 2|+2 to cbr+2
  • 3|+3 to cbr+3

Priority is class:bicycle, where no class:bicycle is tagged the subtags
class:bicycle(:roadcycling|roadbike|touring|commute) are used to build class_bicycle_road

Ann: I like the idea of the class:bicycle taggroup for road/touring, however only a very few roads are tagged so at now its completely useless for common use.
So the support for this tag is intended for mappers, using the Openandromaps with their own custom themes as a base to further add this tag to OSM database.
If this is’nt done I will stop supporting this tag.


For maps from 10th of July 2014:

– added: noexit=ne_yes (Tagtransformed from neoexit=yes)


For maps from 29th of June 2014:

– added climbing=yes transformed to climbing=cl_yes


For maps from 10th of March 2014:
– filter landuses from highways (elininating wrong tagging in OSM)
– filter layer=-1 from waterways already containing

  • [tag k=“culvert“ v=“yes“/]
  • or[tag k=“covered“ v=“yes“/]
  • or[tag k=“pipeline“ v=“yes“/]
  • or[tag k=“location“ v=“underground“/]
  • or[tag k=“tunnel“ v=“.*“/]

Thanks to Richard!


For maps from 5th of February 2014:

– added highway=ford from zoom-level 12
– added ford=yes transformed to ford=fd_yes
– added toll=yes transformed to toll=tl_yes


For maps from 29th of January 2014:

– added incline transformed to incline_dir.
incline_dir=up include: „up“ and all values beginning with a numeric char + .*
incline_dir=down include: „down“ and all values starting with „-“ and one numeric char + .*


For maps from 1st of January 2014:

– winter_room=yes transformed to winter_room=wr_yes to work around CommonValueBug
– raw_sac_scale added. For the „official“ maps and themes the preprocessed difficult-scale for mountain hiking will stay as it is.
For the Mappers prefering the full sac_scale rather than the preprozessed one with personal themes I will add the unprozessed sac_scale transformed to the tag „raw_sac_scale“ with all values from T1-T6:

[osm-tag key=“raw_sac_scale“ value=“RT1″ zoom-appear=“12″ renderable=“false“/]
[osm-tag key=“raw_sac_scale“ value=“RT2″ zoom-appear=“12″ renderable=“false“/]
[osm-tag key=“raw_sac_scale“ value=“RT3″ zoom-appear=“12″ renderable=“false“/]
[osm-tag key=“raw_sac_scale“ value=“RT4″ zoom-appear=“12″ renderable=“false“/]
[osm-tag key=“raw_sac_scale“ value=“RT5″ zoom-appear=“12″ renderable=“false“/]
[osm-tag key=“raw_sac_scale“ value=“RT6″ zoom-appear=“12″ renderable=“false“/]

This is a kind of hidden feature and will be not announced in the changelog of tag-mapping.
The reason why the T is transformed to RT is the common value bug of mapsforge, making it impossible to tag different keys with the same values.


For maps from 26rd of November:

– via_ferrata=0* no longer forces a T4sac_scale/mtbs=6/via_ferrata_flag=yes
– bugfix for highway=motorway_junction (disappearing nodes in links/trunks)


For maps from 3rd of November:

– added trees with a name-tag