[Solved - Device issue not maps] Index all house numbers in maps

I am trying create my own Garmin maps for my rescue team in New Zealand. I am wanting to include all of the house numbers in the index, so they can all be navigated to using the address search on Garmin devices.

The maps that I have produced so far only have a very limited number of house numbers in them. For example, Park St (https://www.openstreetmap.org/#map=18/-41.12522/175.07522) has on 1 and 9 in the Addresses search, though there are 22 address points on OSM (all of New Zealand is addressed with points thanks from data from Land Information NZ).

I am currently using OpenTopoMap (https://github.com/der-stefan/OpenTopoMap/tree/master/garmin) styles and scripts with a few modifications (https://github.com/der-stefan/OpenTopoMap/compare/master…bytesnz:detailed-maps). It uses the housenumbers and index options in the options (see below and https://github.com/bytesnz/OpenTopoMap/blob/detailed-maps/garmin/opentopomap_options) and has a specific file in its style for dealing with the address (see below and https://github.com/bytesnz/OpenTopoMap/blob/detailed-maps/garmin/style/opentopomap/inc/address).

What additional options or styling do I need to include so that all the address/house numbers are included in the index?

Thanks very much.

OpenTopoMap options file

# family-id: 53000
product-id: 1
product-version: 100
draw-priority: 20
copyright-message=OpenStreetMap contributors, OpenTopoMap CC-BY-NC-SA 4.0
# family-name="familyname"
# series-name="seriesname"
# area-name="areaname"
# country-name="countryname"
# country-abbr"ca"
# overview-mapname: 53530000
max-jobs
gmapsupp
hide-gmapsupp-on-pc
# gmapi
latin1
lower-case
index
split-name-index
remove-ovm-work-files
preserve-element-order
split-name-index
housenumbers
drive-on=left
#The following files are defined in the main script
# bounds=bounds-latest.zip
# precomp-sea=sea-latest.zip
# dem=viewfinderpanoramas.zip
dem-dists=9942,9942,19884,39768,53024,53024
show-profiles=1
reduce-point-density=4
reduce-point-density-polygon=4
min-size-polygon=8
polygon-size-limits=24:12, 18:10, 16:8, 14:4, 13:2, 11:0
route
make-opposite-cycleways
add-pois-to-areas
add-pois-to-lines
report-roundabout-issues
link-pois-to-ways
process-destination
process-exits
order-by-decreasing-area
keep-going
location-autofill=bounds,is_in,nearest
pois-to-areas-placement=entrance=main;entrance=yes;building=entrance
remove-short-arcs

OpenTopoMap address style file

#
# This file contains all the rules to set up address information from
# the tags that are added by the boundary processing.


# first set the country code
mkgmap:country!=* & mkgmap:admin_level2=* { set mkgmap:country='${mkgmap:admin_level2}' }
mkgmap:country!=* & addr:country=* { set mkgmap:country='${addr:country}' }
mkgmap:country!=* & is_in:country=* { set mkgmap:country='${is_in:country}' }

# country specific rules first

# Netherlands = NLD
mkgmap:country=NLD & mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' }
mkgmap:country=NLD & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' } 
mkgmap:country=NLD & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' } 

# Germany = DEU cities
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level4=Hamburg {set mkgmap:city='${mkgmap:admin_level4}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level4=Berlin {set mkgmap:city='${mkgmap:admin_level4}' }
mkgmap:country=DEU & mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8|subst:Gemeinde |subst:Stadt}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7|subst:Gemeinde |subst:Stadt}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level6=* { set mkgmap:city='${mkgmap:admin_level6|subst:Gemeinde |subst:Stadt}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9|subst:Gemeinde |subst:Stadt}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10|subst:Gemeinde |subst:Stadt}' }


# Austria = AUT
mkgmap:country=AUT & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10|subst:Gemeinde |subst:Stadt }' }
mkgmap:country=AUT & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8|subst:Gemeinde |subst:Stadt }' }

# Poland = POL
mkgmap:country=POL & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' }
mkgmap:country=POL & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=POL & mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4|subst:województwo =>}' }

# other european countries
mkgmap:country=BEL & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=CZE & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=CZE & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=DNK & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=DNK & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=FIN & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=FIN & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=FRA & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=FRA & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=ISL & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=ITA & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=LUX & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=NOR & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=PRT & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=PRT & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=SVN & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' }
mkgmap:country=ESP & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=SWE & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=SWE & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=CHE & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
 
# Canada
mkgmap:country=CAN & mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' }
mkgmap:country=CAN & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }

# Ecuador = ECU
mkgmap:country=ECU & mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' }
mkgmap:country=ECU & mkgmap:city!=* & mkgmap:admin_level6=* { set mkgmap:city='${mkgmap:admin_level6}' }
mkgmap:country=ECU & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=ECU & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }

# common rules for all the rest of countries
#mkgmap:region!=* & mkgmap:admin_level6=* { set mkgmap:region='${mkgmap:admin_level6}' } 
#mkgmap:region!=* & mkgmap:admin_level5=* { set mkgmap:region='${mkgmap:admin_level5}' } 
#mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' } 
#mkgmap:region!=* & mkgmap:admin_level3=* { set mkgmap:region='${mkgmap:admin_level3}' } 
#mkgmap:region!=* & is_in:county=* { set mkgmap:region='${is_in:county}' } 

mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' } 
mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' } 
mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' } 
mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' } 
mkgmap:city!=* & is_in:city=* { set mkgmap:city='${is_in:city}' }
mkgmap:city!=* & addr:city=* { set mkgmap:city='${addr:city}' }

opening_hours=* {set mkgmap:region='${opening_hours|subst:Tu=>Di|subst:We=>Mi|subst:Th=>Do|subst:Su=>So}' }
website=* {set mkgmap:region='${mkgmap:region}   ${website}'}
collection_times=* {set mkgmap:region='${collection_times|subst:Tu=>Di|subst:We=>Mi|subst:Th=>Do|subst:Su=>So}' }
fee=* {set mkgmap:region='${mkgmap:region} ${fee|subst:yes=>kostenpflichtig|subst:no=>kostenfrei}'}

mkgmap:postal_code!=* & mkgmap:postcode=* { set mkgmap:postal_code='${mkgmap:postcode}' } 
mkgmap:postal_code!=* & addr:postcode=* { set mkgmap:postal_code='${addr:postcode}' } 

mkgmap:street!=* & addr:street=* { set mkgmap:street='${addr:street}' }
mkgmap:street!=* & addr:housename=* { set mkgmap:street='${addr:housename}' }

mkgmap:housenumber!=* & addr:housenumber=* { set mkgmap:housenumber='${addr:housenumber}' }

mkgmap:phone!=* & phone=* { set mkgmap:phone='${phone}' }
mkgmap:phone!=* & contact:phone=* { add mkgmap:phone='${contact:phone}' }

mkgmap:is_in!=* & is_in=* { set mkgmap:is_in='${is_in}' }

Turns out it is just the device I have been testing on (eTrex Touch 25 [horrendous, don’t buy]). The house numbers are searchable on basecamp, so fingers crossed they will be there on a better device…

There is still the possibility that the search works only with PC programs as the global index for the gmapsupp is different to that for the PC.
The --lower-case option is known to cause trouble, mkgmap may not yet write correct index structures in special cases.
Maybe try without it.

Yeah… I have a fear that that is the case. Is there any easy way to check the img file? I just gave the removing the lower-case option and no change.

If you want to display the .img file…
Garmin Basecamp will display your .img files. Just plug your device in to your pc and Basecamp will list them in the left side box.
QMapShack can also display .img files from a folder on your computer instead of plugging in your device.

Not really. The display tool has programs to display or check the index structure but some of these structures are not fully understood until now, means, we are not sure what to do in special cases because those special cases are not found in Garmin maps.
You should first check if the search works when you use the default style. If that is the case the problem is in the OpenTopoMap style.

If you have a download link I can try your map on my Oregon. Just give an example for an address search that should work. Please create a small one with only a two or three tiles and provide also the output files produced by splitter so that I can reproduce your results.

BTW: There is no need to unzip the bounds.zip or sea.zip.