Oh sorry - no my mistake was different - I used the wrong brackets. However I could not find anywhere where this is documented.
working:
set route_name_hiking1 = '$(route_name_hiking1) + ${name|not-contained: + :route_name_hiking1}' | 'IWN ${name}' | '$(route_name_hiking1)' | 'IWN'

not working:
set route_name_hiking1 = '${route_name_hiking1} + ${name|not-contained: + :route_name_hiking1}' | 'IWN ${name}' | '${route_name_hiking1}' | 'IWN'

Why do we have to use standard brackets when referencing a value inside the apply action? Usually for referencing a value we need to use curly {} brackets... 

On Thu, 25 Nov 2021 at 16:17, Felix Hartmann <extremecarver@gmail.com> wrote:
I think there is a bug in mkgmap.

This line works as intended:
set route_name_hiking1 = '${route_name_hiking1} + ${name|not-contained: + :route_name_hiking1}' | 'IWN ${name}' | '${route_name_hiking1}' | 'IWN'
while this line in the relations file fails to work as expected - the part after the + is not added - or at least not visible (strangely the map size is pretty similar).
set route_name_hiking1 = '${route_name_hiking1} + ${name}' | 'IWN ${name}' | '${route_name_hiking1}' | 'IWN'


So only by including the not-contained filter ithe relations file is actually adding the names of the routes after each other - while they are not added without such a filter.

On Wed, 24 Nov 2021 at 10:45, Felix Hartmann <extremecarver@gmail.com> wrote:
I will try your example to see where it goes wrong. Apply_once is about forward and backward relations. It should not matter: https://www.mkgmap.org.uk/pipermail/mkgmap-dev/2010q1/006268.html

On Tue, 23 Nov 2021, 19:32 Mike Baggaley <mike@tvage.co.uk> wrote:

Hi Felix,

 

This is what I have in my relations file for routes:

 

type=route & state!=proposed & route~'.*bicycle.*' & network~'.*ncn.*' & ref~'\d*' { apply_once { set nationalbicycleroute=yes; set rn='$(rn) & ${ref|not-contained: & :rn}' | '$(rn)' | '${ref}'; set nrn='$(nrn) & ${ref|not-contained: & :nrn}' | '$(nrn)' | '${ref}'; } }

type=route & state!=proposed & route~'.*bicycle.*' & network~'.*rcn.*' & ref~'\d*' { apply_once { set regionalbicycleroute=yes; set rn='$(rn) & ${ref|not-contained: & :rn}' | '$(rn)' | '${ref}'; } }

type=route & state!=proposed & (route~'.*foot.*' | route~'.*hiking.*') & network~'.*[nr]wn.*' & name~".*\(.*\)" { set name='${name|subst:"\(.*\)~>"}'}

type=route & state!=proposed & (route~'.*foot.*' | route~'.*hiking.*') & network~'.*nwn.*' & name=* { apply_once { set nationalhikingroute=yes; set rn='$(rn) & ${name|not-contained: & :rn}' | '$(rn)' | '${name}'; set nrn='$(nrn) & ${name|not-contained: & :nrn}' | '$(nrn)' | '${name}'; set nwrn='$(nwrn) & ${name|not-contained: & :nwrn}' | '$(nwrn)' | '${name}'; } }

type=route & state!=proposed & (route~'.*foot.*' | route~'.*hiking.*') & network~'.*rwn.*' & name=* { apply_once { set regionalhikingroute=yes; set rn='$(rn) & ${name|not-contained: & :rn}' | '$(rn)' | '${name}'; } }

 

The most significant difference is that I have apply_once rather than apply.

 

Hope this helps,

Mike

 

From: Felix Hartmann [mailto:extremecarver@gmail.com]
Sent: 23 November 2021 13:31
To: Development list for mkgmap <mkgmap-dev@lists.mkgmap.org.uk>
Subject: [mkgmap-dev] Failure to understand apply logic in relations - or failure in the logic

 

route=hiking { apply { set route=hiking; set route_name = '${route_name} & ${name}' | '${name}'; add route_ref = '${ref}'; } }

 

I would expect that this rule if several relations are matching one line, adds all names of route=hiking relations to the route_name variable separated by "&". However it is only adding the first found.

 

Where is my mistake?

 

--

Felix Hartman - Openmtbmap.org & VeloMap.org

 



--
Felix Hartman - Openmtbmap.org & VeloMap.org



--
Felix Hartman - Openmtbmap.org & VeloMap.org