logo separator

[mkgmap-dev] Bug Report: First rule matches in style files ... not quite!

From Felix Hartmann extremecarver at googlemail.com on Mon May 18 09:53:33 BST 2009

Oh, sorry that my mails treated a subject that was already discussed.
@Thilo - You are User:Radfahrer on the wiki, aren't you?

You wrote that you could patch this behaviour and I assume that you do 
that for the maps of Germany that you offer on osm.ardnet . Could you 
put that patch upstream into mgkmap or are you preprocessing instead?

Thilo Hannemann wrote:
> It says in the documentation that the first rule in the style file 
> that matches the elements is the one used. That is not quite true!
>
> The reason is, that the code handles the rules by putting them into 
> baskets organized by the first condition of the rule (with some 
> exceptions). There is for example a basket for all rules with the 
> first condition "highway=residential". When deciding which rule to 
> apply the code will iterate through all the tags of the osm element. 
> It will determine whether there is a corresponding basket and then 
> apply all the rules in that basket in sequence, until one fits.
>
> This does work only in simple cases. For example see a way with the 
> following tags:
>
> highway=residential
> rcn=yes
>
> This is a residential way that is part of the regional cycle network. 
> (Probably derived by using the "relations" style file to add the tag 
> "rcn=yes" to all ways that are part of an rcn network.)
>
> The lines style file will look like
> -- 
> rcn=yes [ ... some attributes for ways of the cycle network ... ]
> highway=residential [ ... some other attributes for generic 
> residential roads ... ]
> -- 
>
> If the documentation was right the way should always match the first 
> rule (rcn=yes ...). But that is not the case, because it depends on 
> which of the two tags is handled first. This in turn depends on which 
> tag comes first in the osm data. If the tag "rcn=yes" is handled 
> first, the first rule will match, because there is a fitting basket 
> "rcn=yes". This would be according to the documentation. If the tag 
> "highway=residential" is handled first, that rule will (unexpectedly) 
> match, because there is also a fitting basket "highway=residential".
>
> To summarize the problem: The baskets are not ordered, therefore the 
> application of the rules is only "until first hit" inside a basket. 
> Between baskets it is "first tag in the osm data that fits".
>
> To make matters worse the code also tries to optimize the rules, so 
> that the simple rule "first condition determines basket" does not hold.
>
> By inspecting the code it is possible to tweak the rules so that 
> everything works ok, but if somebody can't read the code and tries to 
> build complex style files he will run into serious trouble.
>
> Best regards
> Thilo
>
> _______________________________________________
> mkgmap-dev mailing list
> mkgmap-dev at lists.mkgmap.org.uk
> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev
>



More information about the mkgmap-dev mailing list