logo separator

[mkgmap-dev] is_in() function for point on line

From Joris Bo jorisbo at hotmail.com on Thu Jun 4 15:24:29 BST 2020

Hi Gerd,

- The option 'tagged' sounds perfect
- Now I understand the difference, the option mkgmap:copied-as-poi=true does make sense. You could decide, not to do anything with this poi because you know there will be another one passing by, which is not always true for other poi's generated from the line.
- Suggestions for the manual are oke.

Thank you very much for all the effort.
Joris



-----Oorspronkelijk bericht-----
Van: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk> Namens Gerd Petermann
Verzonden: donderdag 4 juni 2020 16:01
Aan: Development list for mkgmap <mkgmap-dev at lists.mkgmap.org.uk>
Onderwerp: Re: [mkgmap-dev] is_in() function for point on line

Hi Joris,

I can change the code so that the --add-pois-to-lines option accepts the parameter tagged, e.g.
--add-pois-to-lines=start,end,mid,tagged
will always generate a 2nd POI for those OSM nodes which are already POI besides those for the first, last and mid point.

I think the text in the green box is a bit misleading. It should end with ... can be found as mkgmap:from-node:highway=traffic_signals & highway=residential

My idea reg. mkgmap:copied-as-poi was that it tells you that there will be another POI for the same place because this one is the original node that is part of a way.

Gerd

________________________________________
Von: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk> im Auftrag von Joris Bo <jorisbo at hotmail.com>
Gesendet: Donnerstag, 4. Juni 2020 12:43
An: Development list for mkgmap
Betreff: Re: [mkgmap-dev] is_in() function for point on line

Hi Gerd



For the manual see below.



Your last suggestion for an extra tag (mkgmap:copied-as-poi=true) is not really needed I think?

As because of the new poi already has             mkgmap:line2poi=true or mkgmap:area2poi=true

Unless you want to give the style-maker a single check to test for 'created poi's'



For your extra filters --add-pois-to-lines[=all|start|end|mid|other]

I was wondering… in my case I don’t know where somebody puts a traffic_signal or turning_cicle on the line.

So …. I still need the ALL option. But still 99,9% of the line-nodes are just empty nodes with no tags at all.

The traffic signal on the line is recognizable because it does has tags on its own.

So it could be useful to have the option (Start,End,Mid + The non empty ones) and ignore the rest).



Or… let the style-maker specify the line types in the first place and If matched still generate all the nodes

But maybe that’s asked too much with too less performance gain.

--add-pois-to-lines=leisure=slipway,highway=track,highway=residential,highway=via_ferrata,aerialway ~ '(cable_car|gondola)'



Kind regards

Joris







For the style manual under the option mkgmap:line2poi on Page 23 mkgmap:from-node:<tag>=<value> When mkgmap:line2poi = true or mkgmap:area2poi = true. All the values of the poi before they where overwritten with the values from the line or area. Usefull if both line and poi share the same tag with a different value.
add-pois-to-areas
add-pois-to-lines





For the options manual


--add-pois-to-lines[=all|start|end|mid|other]
Generate POIs for lines. The option expects a comma separated list that specifies the positions for which are the POI should be generated. The default is to create all possible POI. For each line (must not be closed) POIs are created at several points of the line. Each POI is tagged with the same tags like the line and additional tags added by mkgmap: mkgmap:line2poi=true and tag mkgmap:line2poitype having the following values:
start - The first point of the line
end - The last point of the line
inner - Each point of the line except the first and the last mid - The middle point other - ?
The orginal values of the poi are also kept in special mkgmap tags mkgmap:from-node:<tag>=<value> which is usefull if both the poi on the line as the line itself have the same tag with a different value. For examle a poi highway=traffic_signals on a way highway=residential can be found as mkgmap:from-node:highway=traffic_signals









-----Oorspronkelijk bericht-----
Van: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk> Namens Gerd Petermann
Verzonden: donderdag 4 juni 2020 11:45
Aan: Development list for mkgmap <mkgmap-dev at lists.mkgmap.org.uk>
Onderwerp: Re: [mkgmap-dev] is_in() function for point on line



Hi Joris,



yes, I think it is important to be backward compatible with existing styles, so we can't change the logic without a good reason.

I thought about using the prefix mkgmap:original-node: first. In the end I prefered mkgmap:from-node: because the latter doesn't imply that the original node is replaced by the generated one.

I might implement more logic to add another tag to the original node, something like mkgmap:copied-as-poi=true if that can help to avoid duplicate POI in the map. Should be a 1-liner, so much easier to implement than to document ;)



Gerd



________________________________________

Von: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>> im Auftrag von Joris Bo <jorisbo at hotmail.com<mailto:jorisbo at hotmail.com>>

Gesendet: Donnerstag, 4. Juni 2020 10:58

An: Development list for mkgmap

Betreff: Re: [mkgmap-dev] is_in() function for point on line



Hi Gerd,







Probably I don't have the overview. I started this mail a couple of times  😊, hopefully you understand the final result



I was confused in the beginning of what really happend in the code behind and the naming of the mkgmap:from-node.



It works perfect, but the naming could be confusing depending from the side you look.







The confusing part for me was that in fact there will be 2 poi's passing by through my poi-rules file not just one.



- POI 1 - The unaltered OSM-id highway = turning_cricle



- POI 2 - A 'synthesized' one derived as a result of the add-poi-to-lines option with an artificial ID







As a dummy user I go to www.openstreetmap.org<http://www.openstreetmap.org>, right click, ask properties, see how a "turning circle" looks like and go to my points-style file. So in terms of simplicity highway = turning_circle is what I expect to be working.







If I use --add-pois-to-lines I'm an advanced style-maker and should not be surprised suddenly all kinds of things happen.



In this case I could get a duplicate poi which 'because of the manual' derives all the values from the line/way/area



If I don't need them, I must put effort in filter them out again.







But by at the moment by overwriting the original values of the node, with the ones derived from the line, we do a kind of source-data violation.



For me it would have made sence if the synthesized poi was named differently



            highway = turning_circle                       instead of highway=track



            ele=300                                               instead of ele=400



            mkgmap:line2poi=true                          a hook to filter them out again



            mkgmap:from-way=highway=track        the highway it was added to



            mkgmap:from-way=ele=400







But if we implement it the way above, then existing styles could suddenly catch extra pois where they did not before.



At the other hand... I really doubt the number of occurrences this could happen because what I see in most styles using --add-poi-to-lines is that they start with a list of pois to get rid of by {deletealltags}







So from that point of view it is maybe better to slightly rename the mkgmap variable?



            highway = track



            ele=400



            mkgmap:line2poi=true



            mkgmap:original-node:highway=turning_circle                        in stead of from-node use original-node



            mkgmap:original-node:ele=300







Kind Regards



Joris











-----Oorspronkelijk bericht-----

Van: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>> Namens Gerd Petermann

Verzonden: woensdag 3 juni 2020 09:40

Aan: Mike Baggaley <mike at tvage.co.uk<mailto:mike at tvage.co.uk>>; 'Development list for mkgmap' <mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk>>

Onderwerp: Re: [mkgmap-dev] is_in() function for point on line







Hi Joris, Hi Mike,







I've implemented the suggested improvements with r4507. Please suggest improvements for the documentation changes.



I did not yet document the new prefix mkgmap:from-node: in the style because I found no simple description. Feel free to suggest something.



Reg. the implementation:



I decided to ignore all tags with the prefix mkgmap: , e,g. those from the LocationHook like mkgmap:admin_level2. It might happen that the values for the node are different to those copied from the way, but I don't assume that anybody wants to add extra rules for that.



Maybe I should change it the other way around so that the generated POI gets the "exact" values from the node (without the mkgmap:from-node: prefix?







The code should also work for POIs added with the --add-pois-to-areas option when the generated POI is using the location of a node because of the --pois-to-areas-placement option.







Gerd







________________________________________



Von: Mike Baggaley <mike at tvage.co.uk<mailto:mike at tvage.co.uk<mailto:mike at tvage.co.uk%3cmailto:mike at tvage.co.uk>>>



Gesendet: Montag, 1. Juni 2020 12:34



An: 'Gerd Petermann'; 'Development list for mkgmap'



Betreff: RE: [mkgmap-dev] is_in() function for point on line







Hi Gerd,







I have --add-pois-to-lines in my command, but right near the beginning of my points file I have







mkgmap:line2poitype=start | mkgmap:line2poitype=inner | mkgmap:line2poitype=end {deletealltags} # only centre of line wanted







I wonder whether there could be some efficiency improvement by extending the --add-pois-to-lines option to be something like







--add-pois-to-lines[=start|end|inner|mid[,...]]







We would then reduce the number of unwanted POIs created.







I actually only use this for placing bridge and tunnel names at the middle of the way and replacing line gates with point gates, so being able to do this in the lines file of my style sheet would be even better:







tunnel=* | bridge=* | barrier=gate {set mkgmap:addpoistoline=mid}







This assumes that generating POIs happens after the line stylesheet is processed.







Regards,



Mike







-----Original Message-----



From: Gerd Petermann [mailto:gpetermann_muenchen at hotmail.com]



Sent: 01 June 2020 10:50



To: Development list for mkgmap <mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>>



Subject: Re: [mkgmap-dev] is_in() function for point on line







Hi Joris,







probably my ideas don't work. Your case is very special because you render the POI only when it is part of a way. The example with entrance=main is probably not a good one as entrance=main & is_in(building,mall,on) [...] already works.



I've coded a better patch so that your example will also work when option --link-pois-to-ways is not used. Up to now the patch depends on that.







I do not yet see how mkgmap can avoid the generation of all useless POI without adding a lot of code to analyse the rules in the points file, but I still think about this. Problem is that we have the generated tags like mkgmap:admin_level10 or mkgmap:residential and I fear to break something that uses tricky rules with just these tags.







> Or we could work the other way around, in stead of render all poi's for all objects and not use them, the mapmaker specifies the explicit objects the poi's are needed.



Yes, might be an option. An exclude list might also work.







Gerd











________________________________________



Von: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> im Auftrag von Joris Bo <jorisbo at hotmail.com<mailto:jorisbo at hotmail.com<mailto:jorisbo at hotmail.com%3cmailto:jorisbo at hotmail.com>>>



Gesendet: Montag, 1. Juni 2020 10:51



An: Development list for mkgmap



Betreff: Re: [mkgmap-dev] is_in() function for point on line







Hallo Gerd,







This works perfect ! (points - file)



mkgmap:from-node:highway = turning_circle & highway = track             [0x641a resolution 24]



mkgmap:from-node:highway = turning_circle & highway != track            [0x641b resolution 24]







Your suggestion will indeed also feature your 'entrance=main' example which is actually a very useful one to avoid cluttering The "add-poi-to-lines" option is still usefull I think ?



For example



- to give a bicycle route a name-poi



- render a symbol for the line leisure = slipway



- render a cable car symbol for aerialway = gondola



- a warning symbol at the highway = via_ferrata



- or incline symbols at the start of steep mountain highways?







If those could be solved without rendering thousands of poi's for complex multipolygon lines that would be great of course.



Or we could work the other way around, in stead of render all poi's for all objects and not use them, the mapmaker specifies the explicit objects the poi's are needed.







Kind regards



Joris







-----Oorspronkelijk bericht-----



Van: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> Namens Gerd Petermann



Verzonden: zondag 31 mei 2020 11:38



Aan: Development list for mkgmap <mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>>



Onderwerp: Re: [mkgmap-dev] is_in() function for point on line







Hi Joris,







up to now we only mentioned nodes with a highway=* tag used in ways with a highway=* tag.



I've coded a rather simple patch for that, but while I did that I wondered why this should be limited to highways.



I decided to use the prefix "mkgmap:from-node:". Tags with prefix mkgmap:  are not copied.







My understanding is that you want a function which tells you if a tagged node is used in one or more ways with a given tag.



For example, you may want to render a node with entrance=main, but only when it is the entrance to a building=mall.



This will not work, because only nodes with the tags barrier or highway are treated special.







I think it is possible to implement this as well. We probably just have to check the points rules and look for uses of "mkgmap:from-node:".



Maybe this would also allow to get rid of the computational overhead produced by the add-poi-to-lines option. The current implementation of this option is really ugly as it computes lots of points which are never used to generate any map object. Think of a complex natural=wood polygon (no other tags). If the points file doesn't contain a rule for natural=wood there is no need to generate the POIs.







I've uploaded a binary compiled with the attached patch here:



http://files.mkgmap.org.uk/download/473/mkgmap.jar







Gerd











________________________________________



Von: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> im Auftrag von Joris Bo <jorisbo at hotmail.com<mailto:jorisbo at hotmail.com<mailto:jorisbo at hotmail.com%3cmailto:jorisbo at hotmail.com>>>



Gesendet: Sonntag, 31. Mai 2020 09:06



An: Development list for mkgmap



Betreff: Re: [mkgmap-dev] is_in() function for point on line







Hi Gerd







Thanks for the answer, always nice if it makes sense again. Then it was worth the testing 😊



For me that would be perfect, the number of cases this will occur is limited so that it's no problem to explicitly test against this replace value. There are probably more situations around highways where this could occur like highway = bus_stop, highway = speedcamera, and traffic signals.







Kind regards,



Joris















-----Oorspronkelijk bericht-----



Van: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> Namens Gerd Petermann



Verzonden: zaterdag 30 mei 2020 18:39



Aan: Development list for mkgmap <mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>>



Onderwerp: Re: [mkgmap-dev] is_in() function for point on line







Hi Joris,



yes, it is a special case. The generated POI gets the tags from the way, so highway=turning_circle is replaced by highway=track.



The node 7131748927 appears only with the tag highway=turning_circle (and maybe the address tags)







Not sure what to do. Maybe store the replaced tag(s) with a prefix, e.g. mkgmap:replaced:highway=turning_circle in this case?







Gerd







________________________________________



Von: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> im Auftrag von Joris Bo <jorisbo at hotmail.com<mailto:jorisbo at hotmail.com<mailto:jorisbo at hotmail.com%3cmailto:jorisbo at hotmail.com>>>



Gesendet: Samstag, 30. Mai 2020 18:11



An: Development list for mkgmap



Betreff: Re: [mkgmap-dev] is_in() function for point on line







Hi Gerd







Could it be possible that in this case the highway tag of the line is ignored because the point turning_circle is of type highway as well?







It's like there is a point {highway = turning_circle} on a line {highway =  track} It looks like I cannot catch it with the mkgmap:line2poitype and mkgmap:line2poi.







Somewhere else I already use



leisure = slipway & mkgmap:area2poi != true & mkgmap:line2poitype = mid  and that works fine







Kind regards,



Joris











-----Oorspronkelijk bericht-----



Van: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> Namens Gerd Petermann



Verzonden: zaterdag 30 mei 2020 17:51



Aan: Development list for mkgmap <mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>>



Onderwerp: Re: [mkgmap-dev] is_in() function for point on line







Hi Joris,







is_in() only works with polygons. You can use --add-pois-to-lines, but be aware that it produces a lot of points for which you probablly don't want to add an object to the map. See the help for the details.







Gerd







________________________________________



Von: mkgmap-dev <mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk<mailto:mkgmap-dev-bounces at lists.mkgmap.org.uk%3cmailto:mkgmap-dev-bounces at lists.mkgmap.org.uk>>> im Auftrag von Joris Bo <jorisbo at hotmail.com<mailto:jorisbo at hotmail.com<mailto:jorisbo at hotmail.com%3cmailto:jorisbo at hotmail.com>>>



Gesendet: Samstag, 30. Mai 2020 17:40



An: Development list for mkgmap



Betreff: [mkgmap-dev] is_in() function for point on line







Hi







Does the is_in() function should also work for a point on a line in stead of in a polygon?







highway = turning_circle & is_in(highway, track, in_or_on) = true      [0x641a resolution 24]







It returns false for this situation where the turningcircle is attached to a highway = track.



(mkgmap:cache_is_in_POINT_highway_track_in_or_on=false)







Would there be another way to know if the point is attached to a highway = track rather then a for example highway = residential?



I use add-pois-to-lines, and link-pois-to-ways but as far as I can see, that doesn't give me more information.







https://www.openstreetmap.org/#map=18/49.65888/5.45845



[cid:image002.jpg at 01D636A9.5643B8A0]











Kind regards



Joris







_______________________________________________



mkgmap-dev mailing list



mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>



http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev



_______________________________________________



mkgmap-dev mailing list



mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>



http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev



_______________________________________________



mkgmap-dev mailing list



mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>



http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev



_______________________________________________



mkgmap-dev mailing list



mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>



http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev







_______________________________________________



mkgmap-dev mailing list



mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk%3cmailto:mkgmap-dev at lists.mkgmap.org.uk>>



http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

_______________________________________________

mkgmap-dev mailing list

mkgmap-dev at lists.mkgmap.org.uk<mailto:mkgmap-dev at lists.mkgmap.org.uk>

http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev
_______________________________________________
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