logo separator

[mkgmap-dev] one correction of default points style and a suggestion for lines

From 7770 7770 at foskan.eu on Thu Dec 2 20:31:22 GMT 2021

Hi.

Some time ago i ran into the mistake of tagging emergecy_phone as it is given 
in the default example style  ./mkgmap-r4818/examples/styles/default/points  
on line 148:
amenity=emergency_phone [0x2f12 resolution 24 default_name 'Emergency Phone']

The correct tagging is however:
emergency=phone [0x2f12 resolution 24 default_name 'Emergency Phone']

I have therefor updated this and i am attaching a suggested points file.
I have done the following:
1. add a comment on line 148 that the above tagging is incorrect.
2. the original line is pushed one line down to 149 and commented out.
3. a new line 150 is added with the new tagging.


I checked most of Nordic countries and Baltic countries, there were none 
incorrectly tagged emergency phones, i havn't checked the rest of the world, 
but it seems that mistakes should be rare.

If you dont mind and if you feel for it, feel free to add the changes into the 
default example style.




Secondly i have noted  that in the example lines file 
./mkgmap-r4818/examples/styles/default/lines 
on line 123-143, the section about junction=roundabout, it would be good to 
add the following one line on line 143, and push the current line to 144.
junction=roundabout & (service=alley | service=driveway) [0x07 road_class=0 
road_speed=1 resolution 23]

The reason for this suggestion is because of line 198 (or 199 after the above 
addition):
highway=service & (service=alley | service=driveway) [0x07 road_class=0 
road_speed=0 resolution 23]

The combination of these will make sure that roundabouts and highways that are 
marked:  highway=service & (service=alley | service=driveway) and can be 
connected to each other are drawn at the same resolution and with the same 
0x07 type.
Otherwise the roundabout is becoming much larger and visible before the 
connecting street/road.

I am attaching an updated lines file as well and again if you dont mind and if 
you feel for it, feel free to add the changes into the default example style.


Regards
Karl
-------------- next part --------------
# -------------------------------------------------------------------
# This is the default mkgmap style file for converting OSM nodes
# into Garmin POIs.
# Any line prefaced with # is a comment and will not be applied.
# Each line is a rule, of the generalised format:
#  OSM_tag(s)_to_match  [Garmin_type_code resolution]
# See http://wiki.openstreetmap.org/wiki/Mkgmap/help/style_rules
# and http://wiki.openstreetmap.org/wiki/Mkgmap/help/Custom_styles
# for more information.

addr:housenumber=* {set mkgmap:execute_finalize_rules=true}

# impose routing/speed restrictions due to access/barrier. See option --link-pois-to-ways

vehicle=* {
    add bicycle='${vehicle}';
    add motor_vehicle='${vehicle}';
    }
motor_vehicle=* {
    add motorcar='${motor_vehicle}';
    add goods='${motor_vehicle}';
    add hgv='${motor_vehicle}';
    add psv='${motor_vehicle}';
    add emergency='${motor_vehicle}';
    }
psv=* {
    add taxi='${psv}';
    add bus='${psv}';
    }

barrier=* & bicycle=*   {set mkgmap:bicycle  =  '${bicycle|subst:private=>no}'}
barrier=* & foot=*      {set mkgmap:foot     =     '${foot|subst:private=>no}'}
barrier=* & hgv=*       {set mkgmap:truck    =      '${hgv|subst:private=>no}'}
barrier=* & motorcar=*  {set mkgmap:car      = '${motorcar|subst:private=>no}'}
barrier=* & bus=*       {set mkgmap:bus      =      '${bus|subst:private=>no}'}
barrier=* & taxi=*      {set mkgmap:taxi     =     '${taxi|subst:private=>no}'}
barrier=* & emergency=* {set mkgmap:emergency='${emergency|subst:private=>no}'}
barrier=* & goods=*     {set mkgmap:delivery =    '${goods|subst:private=>no}'}

barrier=bollard | barrier=block {
    add mkgmap:car=no;
    add mkgmap:delivery=no;
    add mkgmap:truck=no;
    add mkgmap:bus=no;
    add mkgmap:taxi=no;
    add mkgmap:emergency=no;
    }
barrier=cycle_barrier | barrier=kissing_gate | barrier=stile {
    add mkgmap:bicycle=no;
    add mkgmap:car=no;
    add mkgmap:delivery=no;
    add mkgmap:truck=no;
    add mkgmap:bus=no;
    add mkgmap:taxi=no;
    add mkgmap:emergency=no;
    set mkgmap:road-speed=0;
    }
barrier=bus_trap {
    add mkgmap:car=no;
    add mkgmap:delivery=no;
    add mkgmap:truck=no;
    add mkgmap:taxi=no;
    }
barrier=gate | barrier=lift_gate | barrier=swing_gate {
    set mkgmap:road-speed=0;
    }
barrier=* {add mkgmap:road-speed=1}
barrier=* & access=* {addaccess '${access|subst:private=>no}'}

internet_access=yes {name 'Internet ${name}' | 'Internet'} [0x2f12 resolution 24 continue]
internet_access=* & internet_access!=no & internet_access!=yes
    {name 'Internet(${internet_access}) ${name}' | 'Internet(${internet_access})'} [0x2f12 resolution 24 continue]

(public_transport=platform | highway=bus_stop | railway=tram_stop | railway=halt | railway=station)
    & (ref=* | route_ref=*)
    {set ref='${ref|def:}(${route_ref})'}
(public_transport=platform | highway=bus_stop | railway=tram_stop | railway=halt | railway=station)
    & lit=yes & (shelter=yes | covered=yes)
    {set ref='${ref|def:}*'}
(public_transport=platform | highway=bus_stop | railway=tram_stop | railway=halt | railway=station)
    & lit!=yes & (shelter=yes | covered=yes)
    {set ref='${ref|def:}+'}
(public_transport=platform | highway=bus_stop | railway=tram_stop | railway=halt | railway=station)
    & (shelter=no | covered=no)
    {set ref='${ref|def:}-'}

include 'inc/name';

place=city & population > 999999 & name=* [0x0100 resolution 12]
place=city & population > 799999 & name=* [0x0200 resolution 14]
place=city & population > 399999 & name=* [0x0300 resolution 15]
place=city & population > 299999 & name=* [0x0400 resolution 16]
place=city & population > 199999 & name=* [0x0500 resolution 16]
place=city & population >  99999 & name=* [0x0600 resolution 17]
place=city & population >  49999 & name=* [0x0700 resolution 17]
place=city & population >   9999 & name=* [0x0800 resolution 18]

place=city & population >      0 & name=* [0x0800 resolution 18]
place=city                       & name=* [0x0700 resolution 18]

place=town & population >  69999 & name=* [0x0600 resolution 17]
place=town & population >  19999 & name=* [0x0700 resolution 18]
place=town & population >   9999 & name=* [0x0800 resolution 19]
place=town & population >   4999 & name=* [0x0900 resolution 19]
place=town & population >    999 & name=* [0x0a00 resolution 19]
place=town & population >      0 & name=* [0x0b00 resolution 20]
place=town                       & name=* [0x0800 resolution 19]

place=village                    & name=* [0x0900 resolution 22]
place=suburb                     & name=* [0x0a00 resolution 22]
place=hamlet                     & name=* [0x0b00 resolution 24]

place=island & name=* [0x650c resolution 20]
place=islet  & name=* [0x650c resolution 22]

#aeroway=airport [0x5900 resolution 22]
aeroway=airport [0x2f04 resolution 22]
aeroway=aerodrome [0x2f04 resolution 22]
aeroway=helipad [0x5904 resolution 23]
aeroway=terminal [0x2f04 resolution 24]

amenity=atm [0x2f06 resolution 24 continue]
amenity=arts_centre [0x2c04 resolution 24]
amenity=bank [0x2f06 resolution 24]
amenity=bar [0x2d02 resolution 24 continue]
amenity=bench [0x6605 resolution 24 continue]
amenity=biergarten [0x2d02 resolution 24]
amenity=border_control | barrier=border_control [0x3006 resolution 20]
amenity=bus_station [0x2f08 resolution 23]
amenity=cafe {delete cuisine} [0x2a0e resolution 24 continue with_actions]
amenity=car_club [0x2f0d resolution 24]
amenity=car_rental [0x2f02 resolution 24]
amenity=car_sharing [0x2f02 resolution 24]
amenity=car_wash [0x2f0e resolution 24]
amenity=casino [0x2d04 resolution 24]
amenity=charging_station [0x2f01 resolution 24 default_name 'Car charging']
amenity=cinema [0x2d03 resolution 24]
amenity=college [0x2c05 resolution 24]
amenity=concert_hall [0x2c09 resolution 24]
amenity=conference_centre [0x2c09 resolution 24]
amenity=convention_center [0x2c09 resolution 24]
amenity=community_centre [0x3005 resolution 24]
amenity=community_center [0x3005 resolution 24]
amenity=courthouse [0x3004 resolution 24]
amenity=drinking_water [0x5000 resolution 24 default_name 'Water']
amenity=embassy & country=* {set name='${country} ${name|def:Embassy}'} [0x3003 resolution 24]
amenity=embassy & country!=* [0x3003 resolution 24 default_name 'Embassy']
# amenity=emergency_phone is incorrect, use emergency=phone
# amenity=emergency_phone [0x2f12 resolution 24 default_name 'Emergency Phone']
emergency=phone [0x2f12 resolution 24 default_name 'Emergency Phone']
amenity=ferry_terminal [0x2f08 resolution 22]
# handle amenity=fast_food rules later in file
amenity=fire_station [0x3008 resolution 24]
amenity=food_court [0x2a13 resolution 24]
amenity=fuel & fuel:HGV_diesel=yes [0x2f16 resolution 23]
amenity=fuel & shop=convenience [0x2e06 resolution 24]
amenity=fuel [0x2f01 resolution 24]
amenity=grave_yard | amenity=crematorium [0x6403 resolution 24]
amenity=kindergarten [0x2c05 resolution 24]
amenity=library [0x2c03 resolution 24]
amenity=nightclub [0x2d02 resolution 24]
amenity=nursing_home [0x2f14 resolution 24]
(amenity=parking | amenity=parking_entrance) & access!=private & access!=no {add name='${access} parking'| 'Parking'} [0x2f0b resolution 24]
amenity=pharmacy [0x2e05 resolution 24]
amenity=place_of_worship [0x2c0b resolution 24]
amenity=police [0x3001 resolution 24]
amenity=post_box [0x2f15 resolution 24 default_name 'Post box']
amenity=post_office [0x2f05 resolution 24]
amenity=prison [0x3007 resolution 24 default_name 'Prison']
amenity=pub [0x2d02 resolution 24]
amenity=public_building [0x3007 resolution 24]
amenity=recycling [0x2f15 resolution 24 default_name 'Recycling']
# handle amenity=restaurant rules later in file
amenity=school [0x2c05 resolution 24]
# amenity=shelter is ambiguous; when possible, consider using other tags:
#  tourism=lean_to or tourism=picnic_site
#  shelter=yes on highway=bus_stop or highway=tram_stop or railway=halt
amenity=shelter & shelter_type=basic_hut [0x2b06 resolution 24 default_name 'Shelter']
# amenity=supermarket is superceded by shop=supermarket
amenity=supermarket [0x2e02 resolution 24]
amenity=taxi [0x2f17 resolution 24]
amenity=telephone [0x2f12 resolution 24 default_name 'Telephone']
amenity=theatre [0x2d01 resolution 24]
amenity=toilets [0x2f0c resolution 24 default_name 'Toilets']
amenity=townhall [0x3003 resolution 24]
amenity=university [0x2c05 resolution 24]
# amenity=zoo is superceded by tourism=zoo
amenity=zoo [0x2c07 resolution 24]

landuse=military [0x640b resolution 24]
landuse=village_green & name=* [0x2c06 resolution 24]

healthcare=hospital | amenity=hospital | amenity=clinic [0x3002 resolution 22]
healthcare=* | amenity=dentist | amenity=doctors [0x3002 resolution 24]

highway=motorway_junction & exit:road_ref=* {add exit:to='${exit_to}' | '${destination}'} [0x2000 resolution 24]

highway=services {add exit:facility="0x02,I,0x47,Features"} [0x230f resolution 20 default_name 'Services']

historic=museum [0x2c02 resolution 24]
historic=archaeological_site | historic=ruins [0x2c02 resolution 24]
historic=memorial [0x2c02 resolution 24]

leisure=common & name=* [0x2c06 resolution 24]
leisure=garden & name=* [0x2c06 resolution 24]
leisure=golf_course [0x2d05 resolution 24]
leisure=ice_rink [0x2d08 resolution 24]
leisure=marina [0x2f09 resolution 24]
leisure=nature_reserve [0x6612 resolution 24]
leisure=park [0x2c06 resolution 24]
leisure=pitch & (name=* | sport=*) {name '${name} (${sport})' | '${sport}'} [0x2c08 resolution 24]
leisure=playground [0x2c06 resolution 24 default_name 'Playground']
leisure=recreation_ground [0x2c08 resolution 24 default_name 'Rec.']
leisure=sports_center | leisure=sports_centre {name '${name} (${sport})' | '${sport}'} [0x2d0a resolution 24]
leisure=stadium {name '${name} (${sport})' | '${sport}'} [0x2c08 resolution 24]
(leisure=swimming_pool | amenity=swimming_pool) & access!=private & access!=no [0x2d09 resolution 24]
leisure=track {name '${name} (${sport})' | '${sport}'} [0x2c08 resolution 24]
leisure=water_park [0x2d09 resolution 24]

man_made=tower | man_made=mast | landmark=chimney [0x6411 resolution 24]

# Edge 705 displays 0x650a,0x6511,0x6512,0x6513,0x6603,0x6614 as hollow white circles, no menu
natural=cave_entrance [0x6601 resolution 24]
natural=cape [0x6606 resolution 24]
natural=cliff & name=* [0x6607 resolution 24]
natural=peak {name '${name|def:}${ele|height:m=>ft|def:}'} [0x6616 resolution 24]
natural=rock [0x6614 resolution 24]
natural=volcano [0x2c0c resolution 24]
natural=bay & name=* [0x6503 resolution 20]

railway=station [0x2f08 resolution 22]
railway=halt [0x2f08 resolution 23]
# if option --add-pois-to-lines in effect, add just 1 POI
(railway=platform | (public_transport=platform & railway=*)) & (mkgmap:line2poi!=true | mkgmap:line2poitype=mid) [0x2f08 resolution 23]
public_transport=platform & (mkgmap:line2poi!=true | mkgmap:line2poitype=mid) [0x2f17 resolution 24]
highway=bus_stop | railway=tram_stop [0x2f17 resolution 24]

shop=* & name!=* & shop!=yes & shop!=no & shop!=none & shop!=vacant {set name='${shop|subst:"_=> "}'}
# Uncomment the following lines to enable these extra POI that some devices support
#shop=convenience [0x2e0e resolution 24]
#shop=florist [0x2e0f resolution 24]
#shop=gift | shop=art | shop=antiques [0x2e10 resolution 24]
#shop=music [0x2e11 resolution 24]
#shop=sports [0x2e12 resolution 24]
#shop=wine | shop=alcohol [0x2e13 resolution 24]
#shop=books [0x2e14 resolution 24]
# to here

shop=bakers [0x2e02 resolution 24]
shop=bakery [0x2e02 resolution 24]
shop=beauty [0x2f10 resolution 24]
shop=bicycle [0x2f13 resolution 24]
shop=boat [0x2f09 resolution 24]
shop=butcher [0x2e0c resolution 24]
shop=car [0x2f07 resolution 24]
shop=car_dealer [0x2f07 resolution 24]
shop=car_parts [0x2f07 resolution 24]
shop=car_rental [0x2f02 resolution 24]
shop=car_repair [0x2f03 resolution 24]
shop=car_wrecker [0x2f0a resolution 24]
shop=chemist [0x2e05 resolution 24]
shop=clothes [0x2e07 resolution 24]
shop=computer [0x2e0b resolution 24]
shop=convenience [0x2e02 resolution 24]
shop=department_store [0x2e01 resolution 24]
shop=doityourself [0x2e09 resolution 24]
shop=fashion [0x2e07 resolution 24]
shop=furniture [0x2e09 resolution 24]
shop=garden_centre [0x2e08 resolution 24]
shop=garden_center [0x2e08 resolution 24]
shop=general [0x2e03 resolution 24]
shop=hardware [0x2e09 resolution 24]
shop=hairdresser [0x2f10 resolution 24]
shop=mall [0x2e04 resolution 24]
shop=organic [0x2e0a resolution 24]
shop=outdoor [0x2e08 resolution 24]
shop=shoes [0x2e07 resolution 24]
shop=supermarket [0x2e02 resolution 24]
shop=tires [0x2f07 resolution 24]
shop=tyres [0x2f07 resolution 24]
shop=* & name=* [0x2e0c resolution 24]

sport=9pin [0x2d07 resolution 24]
sport=10pin | leisure=bowling_alley [0x2d07 resolution 24]
sport=airport [0x2d0b resolution 24]
sport=multi [0x2d0a resolution 24]
sport=skating [0x2d08 resolution 24]
sport=skiing [0x2d06 resolution 24]
sport=swimming [0x2d09 resolution 24]

tourism=alpine_hut [0x2b02 resolution 24]
tourism=attraction & historic=* [0x2c02 resolution 24]
tourism=attraction [0x2c04 resolution 24]
tourism=artwork [0x2c04 resolution 24]
tourism=aquarium [0x2c07 resolution 24]
tourism=bed_and_breakfast [0x2b02 resolution 24]
# NB: different devices use different codes for camp/caravan_site, have both!
tourism=camp_site [0x2b03 resolution 24] [0x2b05 resolution 24]
tourism=caravan_site [0x2b03 resolution 24] [0x2b05 resolution 24]
tourism=chalet [0x2b02 resolution 24]
tourism=guest_house [0x2b02 resolution 24]
tourism=hostel [0x2b02 resolution 24]
# Have both hotel &| restaurant POIs
tourism=hotel | tourism=motel {set tmp:stopMopUp=yes} [0x2b01 resolution 24 continue with_actions]
tourism=information [0x4c00 resolution 24]
# tourism=lean_to replaces some uses of amenity=shelter
tourism=lean_to [0x2b05 resolution 24 default_name 'lean-to']
tourism=wilderness_hut [0x2b07 resolution 24 default_name 'wilderness hut']
tourism=museum [0x2c02 resolution 24]
tourism=picnic_site [0x4a00 resolution 24]
tourism=resort [0x2b04 resolution 24]
tourism=theme_park [0x2c01 resolution 24]
tourism=viewpoint {name '${name} - ${description}' | '${name}'} [0x2c04 resolution 24]
tourism=wine_cellar [0x2c0a resolution 24]
tourism=zoo [0x2c07 resolution 24]
tourism=* & name!=* & tourism!=yes & tourism!=no {set name='${tourism|subst:"_=> "}'}
tourism=* & tourism!=no & tmp:stopMopUp!=yes [0x2c0d resolution 24]

# amenity=restaurant/fast_food/cafe/pub and shop=* can use cuisine, so have cuisine section later than where the others
# should take precedence
# Have the following 2 lines here rather than after cuisine=... so that, for amenity=fast_food, cuisine is ignored
amenity=fast_food & cuisine=* {add name='${cuisine|subst:"_=> "}'} [0x2a07 resolution 24]
amenity=fast_food [0x2a07 resolution 24]

# "Food & Drink" Search has categories as follows, corresponding to 0x2a00 - 0x2a13:
#   All, American, Asian, Barbeque, Chinese, Deli/Bakery, International, Fast Food, Italian, Mexican, Pizza,
#     Seafood, Steak/Grill, Bagel/Donut, Cafe/Diner, French, German, British Isles, Speciality Food Products, Other
amenity=restaurant & cuisine!=*
    [0x2a00 resolution 24]
cuisine=american | cuisine=burger
    [0x2a01 resolution 24]
cuisine=asian | cuisine=japanese | cuisine=indian | cuisine=curry | cuisine=thai | cuisine=sushi | cuisine=korean
    [0x2a02 resolution 24]
cuisine=barbecue | cuisine=bbq | cuisine=kebab | cuisine=chicken
    [0x2a03 resolution 24]
cuisine=chinese | cuisine=vietnamese
    [0x2a04 resolution 24]
cuisine=deli | cuisine=sandwich
    [0x2a05 resolution 24]
cuisine=international
    [0x2a06 resolution 24]
cuisine=fast_food
    [0x2a07 resolution 24]
cuisine=italian | cuisine=pasta
    [0x2a08 resolution 24]
cuisine=mexican | cuisine=spanish | cuisine=tapas
    [0x2a09 resolution 24]
cuisine~'.*pizza.*'
    [0x2a0a resolution 24]
cuisine=seafood | cuisine=sea_food | cuisine=fish
    [0x2a0b resolution 24]
cuisine=steak | cuisine=grill | cuisine=steak_house
    [0x2a0c resolution 24]
cuisine=bagel | cuisine=donut
    [0x2a0d resolution 24]
cuisine=cafe | cuisine=diner | cuisine=coffee_shop
    [0x2a0e resolution 24]
cuisine=french
    [0x2a0f resolution 24]
cuisine=german | cuisine=bavarian
    [0x2a10 resolution 24]
cuisine=british | cuisine=fish_and_chips
    [0x2a11 resolution 24]
cuisine=speciality | cuisine=local | cuisine=regional
    [0x2a12 resolution 24]
amenity=restaurant {add name='${cuisine|subst:"_=> "}'}
    [0x2a13 resolution 24]
#common ones not handled:
# ice_cream,greek,turkish,noodle,portugese,pasties,lebanese,brazilian,mediterranean,oriental,caribbean,vegetarian

# Have the following 2 lines here rather than before cuisine=... so that, for amenity=fast_food, cuisine is respected
#amenity=fast_food & cuisine=* {add name='${cuisine|subst:"_=> "}'} [0x2a07 resolution 24]
#amenity=fast_food [0x2a07 resolution 24]

barrier=bollard | barrier=bus_trap | barrier=gate | barrier=block | barrier=cycle_barrier |
    barrier=stile | barrier=kissing_gate | barrier=lift_gate | barrier=swing_gate
    {add name='${barrier|subst:"_=> "}'} [0x3200 resolution 24]

landuse=basin [0x6603 resolution 24]
landuse=reservoir | water=reservoir [0x650f resolution 22]

natural=beach [0x6604 resolution 24]
natural=glacier [0x650a resolution 24]
natural=spring [0x6511 resolution 24]
natural=stream [0x6512 resolution 24]
natural=water & (water=canal | water=lock) & name=* [0x6505 resolution 24]
(water=lake | water=pond) & name=* [0x650d resolution 24]
natural=water & name=* [0x6603 resolution 24]
natural=waterfall | waterway=waterfall [0x6508 resolution 24]
natural=wetland & name=* [0x6513 resolution 24]

landuse=cemetery | landuse=cemetary | amenity=grave_yard [0x6403 resolution 24]
(landuse=wood | landuse=forest | natural=wood) & name=* [0x6618 resolution 24]

<finalize>
# The finalizer section is executed for each element when a rule with an element type matches

name=* {name '${name}'}
include 'inc/address';
-------------- next part --------------
# -------------------------------------------------------------------
# This is the default mkgmap style file for converting OSM ways
# into Garmin lines.
# Any line prefaced with # is a comment and will not be applied.
# Each line is a rule, of the generalised format:
#  OSM_tag(s)_to_match  [Garmin_type_code resolution]
# See http://wiki.openstreetmap.org/wiki/Mkgmap/help/style_rules
# and http://wiki.openstreetmap.org/wiki/Mkgmap/help/Custom_styles
# for more information.

addr:housenumber=* {set mkgmap:execute_finalize_rules=true}

abandoned=yes {deletealltags}  # old, depreciated, ambiguous, method of handling abandoned

# do these as lines regardless of being closed unless explicity marked as area. continue in case also a highway
aeroway=runway & area!=yes {name '${ref}'} [0x27 resolution 20 continue]
(aeroway=taxiway | aeroway=taxilane) & area!=yes {name '${ref}'} [0x27 resolution 24 continue]

# Assign the street name for house number search
highway=* & name=* {set mkgmap:street='${name}'}

# Mark highways with the toll flag
highway=* & (toll=yes | toll=true) {set mkgmap:toll=yes}

# Hide proposed ways
highway=proposed | highway=proposal | highway=planned | highway~'.*proposed.*' {delete highway; delete junction}
# Hide removed ways
highway=razed | highway=dismantled | highway=disused | highway=demolished {delete highway; delete junction}
# Hide abandoned ways. Abandoned highways have some evidence of their former existence but are no longer used. These
# abandoned highways could be useful in topographical maps.
# https://wiki.openstreetmap.org/wiki/Key:abandoned:
(abandoned:highway=* & (highway!=* | highway=yes)) | highway=abandoned {delete highway; delete junction}
# Hide other non-existent ways
highway=unbuilt | highway=neverbuilt | highway=rejected | highway~'x-.*' {delete highway; delete junction}
# Remove highway tag from ways which are not suitable for routing
highway=traffic_signals | highway=junction | highway=island | highway=centre_line | highway=traffic_island | highway=stopline |
    highway=bus_stop | highway=bus_guideway | highway=emergency_access_point | highway=ohm:military:Trench
    {delete highway}
highway=via_ferrata {delete highway}  # this shouldn't show as routable on default map: path only for specialists
highway=piste | highway=ski {delete highway}
highway=no | highway=none {delete highway}

# Disable dead-end-checks for unaccessible oneways
highway=* & oneway=yes & (access=private | access=no) {add mkgmap:dead-end-check=false}
# Validation-like checks (uncomment to enable)
#highway=motorway_link & oneway!=yes & oneway!=no {echo "motorway_link lacks oneway"}
highway=motorway | highway=motorway_link {add oneway=yes; add mkgmap:numbers=false}

# start of rules for process-exits and process-destination options
# which may add info to a part of these highway=*_link roads:
# motorway_link, trunk_link, primary_link, secondary_link, tertiary_link
# build destination hint
mkgmap:dest_hint=* {
    set tmp:dest_hint='${destination:ref|subst: =>} ${mkgmap:dest_hint|subst:;=> |subst:/=> }' |
                      '${ref|subst: =>} ${mkgmap:dest_hint|subst:;=> |subst:/=> }' |
                      '${mkgmap:dest_hint|subst:;=> |subst:/=> }';
    }
# build exit hint
mkgmap:exit_hint=true {
    set tmp:exit_hint='Exit ${mkgmap:exit_hint_ref} ${mkgmap:exit_hint_name}' |
                      'Exit ${mkgmap:exit_hint_ref} ${mkgmap:exit_hint_exit_to}' |
                      'Exit ${mkgmap:exit_hint_exit_to}' |
                      'Exit ${mkgmap:exit_hint_name}' |
                      'Exit ${mkgmap:exit_hint_ref}';
    }
# use destination hint and/or exit hint to build name
mkgmap:exit_hint=true | mkgmap:dest_hint=* {name '${tmp:exit_hint} ${tmp:dest_hint}' | '${tmp:dest_hint}' | '${tmp:exit_hint}'}
# end of rules for process-exits and process-destination options

# Flag paved roads
highway=* & (surface=asphalt | surface=paved | surface=sett |
    surface=concrete | surface=concrete:lanes | surface=concrete:plates |
    surface=paving_stones | surface=cobblestone |
    surface=cobblestone:flattened | surface=metal | surface=wood)
    {set mkgmap:unpaved=0}
highway=* & tracktype=grade1 & surface!=* {set mkgmap:unpaved=0}

# Flag unpaved roads.
highway=* & mkgmap:unpaved!=0 & (
    surface=* |
    mtb:scale=* |
    tracktype~'grade[2-6]')
    {add mkgmap:unpaved=1}
highway=* & (
    mtb:scale~'[2-6].' |
    sac_scale~'.*(mountain|alpine)_hiking' |
    sport=via_ferrata)
    {set mkgmap:unpaved=1}
(highway=bridleway | highway=path | highway=track) & mkgmap:unpaved!=0 {add mkgmap:unpaved=1}
(highway=unsurfaced | highway=via_ferrata) {set mkgmap:unpaved=1}

highway=* & mkgmap:unpaved!=1 & smoothness~'.*(bad|horrible|impassable)' {add mkgmap:road-speed=-2}

# Good ways without relation
highway=* & mkgmap:fast_road!=* & (int_ref=* | network=e-road | network=AH | network=TAH | network=US:I | network=US:US)
    {add mkgmap:fast_road=yes}
# Not best for car routing
highway=* & (access=hov | hov=designated | oneway=reversible)
    {set mkgmap:road-class=-2; set mkgmap:road-speed=-2; delete mkgmap:fast_road}

# convert some specific to generic with restrictions (platform is in a bus station)
highway=steps | highway=corridor | highway=stepping_stones | highway=elevator | highway=escalator | highway=platform
    {set highway=footway; add bicycle=no}
# virtual seems to be a way across a pedestrian area
highway=crossing | highway=virtual
    {set highway=path}  # following logic may change

# Convert generic path to most specific
highway=path & (designation=permissive_bridleway | designation=public_bridleway)
    {set highway=bridleway; add foot=yes}
highway=path & (designation=permissive_footpath | designation=public_footpath)
    {set highway=footway; add foot=designated}
highway=path & snowplowing!=no & (bicycle=designated | bicycle=permissive | bicycle=official | cycleway=lane)
    {set highway=cycleway; add foot=yes}
highway=path & foot=designated
    {set highway=footway}

leisure=track & area!=yes {name '${name} (${sport})' | '${sport}'} [0x30 resolution 22]
man_made=pier | man_made=piste:halfpipe {add highway=footway; name '${ref} ${name}' | '${ref}' | '${name}'}

man_made=breakwater & is_closed()=false & mkgmap:mp_created!=true [0x17 resolution 22 default_name 'Breakwater']

# Roundabouts
junction=roundabout & (highway=trunk | highway=trunk_link) [0x0c road_class=4 road_speed=2 resolution 24 continue]
junction=roundabout & (highway=trunk | highway=trunk_link) [0x10801 resolution 18]

junction=roundabout & (highway=primary | highway=primary_link) & mkgmap:fast_road=yes [0x0c road_class=4 road_speed=2 resolution 24 continue]
junction=roundabout & (highway=primary | highway=primary_link) & mkgmap:fast_road=yes [0x10802 resolution 19]

junction=roundabout & (highway=primary | highway=primary_link) [0x0c road_class=3 road_speed=2 resolution 24 continue]
junction=roundabout & (highway=primary | highway=primary_link) [0x10802 resolution 19]

junction=roundabout & (highway=secondary | highway=secondary_link) & mkgmap:fast_road=yes [0x0c road_class=3 road_speed=2 resolution 24 continue]
junction=roundabout & (highway=secondary | highway=secondary_link) & mkgmap:fast_road=yes [0x10803 resolution 20]

junction=roundabout & (highway=secondary | highway=secondary_link) [0x0c road_class=2 road_speed=2 resolution 24 continue]
junction=roundabout & (highway=secondary | highway=secondary_link) [0x10803 resolution 20]

junction=roundabout & (highway=tertiary | highway=tertiary_link) [0x0c road_class=1 road_speed=1 resolution 24 continue]
junction=roundabout & (highway=tertiary | highway=tertiary_link) [0x10804 resolution 21]

junction=roundabout & (highway=unclassified | highway=minor) [0x0c road_class=1 road_speed=1 resolution 21]
junction=roundabout & (service=alley | service=driveway) [0x07 road_class=0 road_speed=1 resolution 23]
junction=roundabout & highway=* [0x0c road_class=0 road_speed=1 resolution 22]

# Ways that may or may not be useable

# Treat ways under construction almost as highway=path, see also extra rule in inc/access
highway=construction {add mkgmap:dead-end-check=false} [0x16 road_class=0 road_speed=0 resolution 23]

# Lower the road speed of ways under some construction.
highway=* & construction=* & maxspeed!=* {add mkgmap:road-speed='-1'}
# Lower the road speed of disused ways.
highway=* & disused=yes & maxspeed!=* {add mkgmap:road-speed='-2'}

# Ways sorted roughly by descending order of class
highway=motorway & mkgmap:fast_road=yes [0x01 road_class=4 road_speed=7 resolution 14]
highway=motorway [0x01 road_class=4 road_speed=7 resolution 15]
highway=motorway_link & (mkgmap:exit_hint=true | mkgmap:dest_hint=*) [0x0b road_class=4 road_speed=2 resolution 20]
highway=motorway_link [0x09 road_class=4 road_speed=2 resolution 20]

highway=trunk & mkgmap:fast_road=yes [0x02 road_class=4 road_speed=5 resolution 15]
highway=trunk [0x02 road_class=4 road_speed=5 resolution 18]
highway=trunk_link & (mkgmap:exit_hint=true | mkgmap:dest_hint=*) [0x0b road_class=4 road_speed=2 resolution 20]
highway=trunk_link [0x09 road_class=4 road_speed=2 resolution 20]
highway=* & motorroad=yes [0x02 road_class=4 road_speed=4 resolution 18]
highway=primary & mkgmap:fast_road=yes [0x03 road_class=4 road_speed=4 resolution 17]
highway=primary [0x03 road_class=3 road_speed=4 resolution 19]
highway=primary_link & (mkgmap:exit_hint=true | mkgmap:dest_hint=*) & mkgmap:fast_road=yes [0x0b road_class=4 road_speed=1 resolution 21]
highway=primary_link & (mkgmap:exit_hint=true | mkgmap:dest_hint=*) [0x0b road_class=3 road_speed=1 resolution 21]
highway=primary_link & mkgmap:fast_road=yes [0x08 road_class=4 road_speed=1 resolution 21]
highway=primary_link [0x08 road_class=3 road_speed=1 resolution 21]
highway=secondary & mkgmap:fast_road=yes [0x04 road_class=3 road_speed=3 resolution 18]
highway=secondary [0x04 road_class=2 road_speed=3 resolution 20]
highway=secondary_link & mkgmap:fast_road=yes [0x08 road_class=3 road_speed=1 resolution 22]
highway=secondary_link [0x08 road_class=2 road_speed=1 resolution 22]
highway=tertiary [0x05 road_class=1 road_speed=3 resolution 20]
highway=tertiary_link [0x08 road_class=1 road_speed=1 resolution 22]
highway=minor [0x06 road_class=1 road_speed=3 resolution 21]
highway=unclassified [0x06 road_class=0 road_speed=3 resolution 21]

highway=yes {set highway=footway}  # fix common bad tagging - little bits of path to join other routable ways

# Some countries allow, others disallow bicycling on pedestrian streets. See inc/access_country

# highway=pedestrian could be closed polygon to represent a 'square', add route regardless and continue for polygon processing
highway=pedestrian {set tmp:stopMopUp=yes} [0x16 road_class=0 road_speed=0 resolution 22 continue with_actions]

highway=living_street [0x06 road_class=0 road_speed=1 resolution 22]
highway=residential [0x06 road_class=0 road_speed=2 resolution 22]
highway=bridleway [0x07 road_class=0 road_speed=0 resolution 23]
highway=byway [0x16 road_class=0 road_speed=0 resolution 23]

highway=driveway {set highway=service; add service=driveway}  # fix common bad tagging
highway=access  {set highway=service}  # fix common bad tagging
highway=access_ramp {set highway=footway}  # proposed

highway=service & service=parking_aisle [0x07 road_class=0 road_speed=1 resolution 24]
highway=service & (service=alley | service=driveway) [0x07 road_class=0 road_speed=0 resolution 23]
highway=service [0x07 road_class=0 road_speed=2 resolution 22]

highway=cycleway [0x11 road_class=0 road_speed=1 resolution 23]

# highway=footway is often an area as well, continue for polygon processing
highway=footway {set tmp:stopMopUp=yes} [0x16 road_class=0 road_speed=0 resolution 23 continue with_actions]

highway=trail {set highway=path; add bicycle=no}  # fix common bad tagging

highway=path [0x16 road_class=0 road_speed=0 resolution 23]
highway=track [0x0a road_class=0 road_speed=1 resolution 22]
highway=unsurfaced [0x0a road_class=0 road_speed=1 resolution 22]
highway=road {add mkgmap:dead-end-check=false} [0x06 road_class=0 road_speed=1 resolution 22]

# handle some rarer bits of road. Do just in case joining paths or bits of one-way roads
highway=turning_loop | highway=turning_circle | highway=layby | highway=escape | highway=emergency_bay
    [0x07 road_class=0 road_speed=0 resolution 24]

# These are too specialized to have routing, so shouldn't drop into the mop-up, but, maybe needing TYP, can be shown on the map
highway=raceway | highway=gallop {add name='${highway}'} [0x30 resolution 23]

# Don't have routable for either of these:
# most 'rest_area' don't connect to the main road
# 'services' is normally a big area that covers the whole complex
highway=rest_area | highway=services {set tmp:stopMopUp=yes}

# Mop up any unrecognised highway types
#highway=* & tmp:stopMopUp!=yes {echotags 'mop-up highway'}  # mostly actual road names
# It is considered best not to process unrecognised highway types
#highway=* & area!=yes & tmp:stopMopUp!=yes [0x07 road_class=0 road_speed=0 resolution 23]

natural=coastline [0x15 resolution 12]
power=line [0x29 resolution 21]

railway=platform & tmp:stopMopUp!=yes [0x16 road_class=0 road_speed=0 resolution 23]
# Railway lines, note that many devices display type 0x14 only at resolution 24
(railway=rail | railway=tram | railway=disused | railway=subway | railway=narrow_gauge | railway=light_rail | railway=preserved) & !(tunnel=yes)
    [0x14 resolution 22]

(man_made=cable | (man_made=* & man_made~'.*pipe.*')) & area!=yes & tunnel!=yes & location!=underground
    {name '${name} (${operator})' | '${name}' | '${operator}'} [0x28 resolution 23]

# The following boundary styles are after the highway rules because ways
# are frequently tagged with both and we want the highway to take priority.
boundary=administrative {name '${mkgmap:boundary_name}'}
boundary=administrative & admin_level<3 [0x1e resolution 12]
boundary=administrative & admin_level<5 [0x1d resolution 19]
boundary=administrative & admin_level<7 [0x1c resolution 21]
boundary=administrative & admin_level<9 [0x1c resolution 22]
boundary=administrative [0x1c resolution 22]
boundary=national [0x1e resolution 17]
boundary=political [0x1c resolution 19]

barrier=wall | barrier=fence | barrier=hedge | barrier=ditch {add name='${barrier|subst:"_=> "}'} [0x17 resolution 24]

route=ferry & (toll=no | toll=false) {set mkgmap:toll=no}
route=ferry {set mkgmap:numbers=false; set mkgmap:ferry=1; add mkgmap:toll=yes}
route=ferry & (motorcar=no | motor_vehicle=no) [0x1b road_class=0 road_speed=0 resolution 23]
route=ferry [0x1a road_class=3 road_speed=0 resolution 19]

(waterway=river | waterway=stream | waterway=rapids | waterway=waterfall) {add mkgmap:has-direction=true}
(waterway=river | waterway=canal) & intermittent=yes [0x26 resolution 20]
(waterway=stream | waterway=drain) & intermittent=yes [0x26 resolution 22]

waterway=canal [0x1f resolution 21]
waterway=river [0x1f resolution 18]
waterway=rapids|waterway=waterfall [0x1f resolution 22]
waterway=stream | waterway=drain [0x18 resolution 22]

# mop up any remaining water lines
waterway=* & waterway!=no & (area=no | (is_closed()=false & mkgmap:mp_created!=true))
    {add name='${waterway|subst:"_=> "}'} [0x26 resolution 24]

include 'inc/contour_lines';

<finalize>
# The finalizer section is executed for each element when a rule with an element type matches

include 'inc/address';
# calculate the road speed based on maxspeed tag
include 'inc/roadspeed';
# calculate the access rules
include 'inc/access';
                                   
#limit artificial cycleways to resolution 24
mkgmap:synthesised=yes & mkgmap:bicycle=yes {set mkgmap:highest-resolution-only=true}

# don't add house numbers to unnamed or artifical bicycle ways
mkgmap:bicycle=yes & (mkgmap:foot=no & mkgmap:car=no & mkgmap:street!=* | mkgmap:synthesised=yes) {set mkgmap:numbers=false}

# Display highway shield for mayor roads if they have a ref and make them searchable by their name
(highway=motorway | highway=trunk)     & ref=* {name '${ref|highway-symbol:hbox}'; addlabel '${name}'}
highway=primary                        & ref=* {name '${ref|highway-symbol:box}' ; addlabel '${name}'}
(highway=secondary | highway=tertiary) & ref=* {name '${ref|highway-symbol:oval}'; addlabel '${name}'}

name=* {name '${name}'}
highway=* & ref=* & highway!=motorway & highway!=trunk & highway!=primary & highway!=secondary & highway!=tertiary
    {addlabel '${ref}'}

highway=* & int_ref=* {addlabel '${int_ref}'}
highway=* & nat_ref=* {addlabel '${nat_ref}'}
highway=* & reg_ref=* {addlabel '${reg_ref}'}


More information about the mkgmap-dev mailing list