[GraphHopper] Does Graphhopper merge ways with equal flags and name?

Peter graphhopper at gmx.de
Thu Jun 4 10:12:13 UTC 2015


The code should be easily adaptable if you pass the degree of the node
(e.g. 2 or if endstanding then 1) and then you can also merge ways

Regards,
Peter

On 04.06.2015 00:14, John Zhao wrote:
> Hi Peter,
>
> Thanks for the explanation.
> I think the answer is: 
> there is no merging logic to combine 2 different but connected OSM
> ways in GH.
> GH only chop the long OSM ways into several edges by the intersections. 
>
> *Best Regards,*
> *ZhiQiang ZHAO*
>
> On Wed, Jun 3, 2015 at 2:27 PM, Peter <graphhopper at gmx.de
> <mailto:graphhopper at gmx.de>> wrote:
>
>     Hi John,
>
>     the problem is as follows:
>     Assume the osm ways A-B-C (west to east) and D-E-F (north to south)
>
>     Now if the node B is the same as F or E then we have a tower node
>     or junction. But if the nodes C and F are identical then this
>     would be a pillar node (and we handle it like a tower node). So
>     the import always assumes case 1 and we are always safe but in
>     some rare cases we could avoid creating a tower node.
>
>     Regards,
>     Peter
>
>
>     On 03.06.2015 23:13, John Zhao wrote:
>>     Hi Peter,
>>
>>     I am more confused.
>>     I think the original question is:
>>     If there are 2 different OSMways in original OSM data, they and
>>     only they are connected.
>>     And all the other tags are the same.
>>     Does Graphhopper will merge them into a single edge in GH?
>>     Then the graph is a little bit simplified.
>>
>>     *Best Regards,*
>>     *ZhiQiang ZHAO*
>>
>>     On Wed, Jun 3, 2015 at 2:07 PM, Peter <graphhopper at gmx.de
>>     <mailto:graphhopper at gmx.de>> wrote:
>>
>>         Hi John,
>>
>>         good question :)
>>
>>         Maybe that is the reason that in rare cases pillar nodes are
>>         incorrectly determined as tower nodes. One could introduce a
>>         new PILLAR_NODE2=0 variable and try if everything is still
>>         working. But before I would pick a big area and count the
>>         percentage of those incorrectly determined tower nodes if
>>         this is valuable at all.
>>
>>         Regards,
>>         Peter
>>
>>
>>
>>         On 03.06.2015 22:16, John Zhao wrote:
>>>         Hi Peter,
>>>
>>>         That sounds reasonable. But I am still confused.
>>>         I think the logic is under the below logic. 
>>>         Based on the logic and commets, a node is "mark node as
>>>         tower node as it occured at least twice times", not "at
>>>         least 3 times".
>>>
>>>             void prepareHighwayNode( long osmId )
>>>
>>>             {
>>>
>>>                 int tmpIndex = getNodeMap().get(osmId);
>>>
>>>                 if (tmpIndex == EMPTY)
>>>
>>>                 {
>>>
>>>                     // osmId is used exactly once
>>>
>>>                     getNodeMap().put(osmId, PILLAR_NODE);
>>>
>>>                 } else if (tmpIndex > EMPTY)
>>>
>>>                 {
>>>
>>>                     // mark node as tower node as it occured at
>>>         least twice times
>>>
>>>                     getNodeMap().put(osmId, TOWER_NODE);
>>>
>>>                 } else
>>>
>>>                 {
>>>
>>>                     // tmpIndex is already negative (already tower node)
>>>
>>>                 }
>>>
>>>             }
>>>
>>>
>>>         *Best Regards,*
>>>         *ZhiQiang ZHAO*
>>>
>>>         On Wed, Jun 3, 2015 at 12:15 PM, Peter <graphhopper at gmx.de
>>>         <mailto:graphhopper at gmx.de>> wrote:
>>>
>>>             Hi,
>>>
>>>             the details are a bit trickier as we do everything very
>>>             memory efficient.
>>>
>>>             And if a osm node occurs twice it is a pillar node,
>>>             otherwise it is a tower node.
>>>
>>>             Kind Regards,
>>>             Peter
>>>
>>>
>>>             On 03.06.2015 21:05, John Zhao wrote:
>>>>             I go through the logic:
>>>>             It go through all osmways, and count the occurrence of
>>>>             nodeID.
>>>>             if nodeID appear only once, it's a pillar node.
>>>>             otherwise, it's a tower node.
>>>>
>>>>             That's it. Do I miss something?
>>>>
>>>>
>>>>             *Best Regards,*
>>>>             *ZhiQiang ZHAO*
>>>>
>>>>             On Wed, Jun 3, 2015 at 11:55 AM, Peter
>>>>             <graphhopper at gmx.de <mailto:graphhopper at gmx.de>> wrote:
>>>>
>>>>                 Hi,
>>>>
>>>>                 there is no separate merging logic (although there
>>>>                 was in 0.1 or something). In OSMReader it is
>>>>                 decided when an edge is created and e.g. OSM ways
>>>>                 are splitted if there are barriers or junctions on
>>>>                 the way. So it decides whether an osm nodes will be
>>>>                 a tower node or just a pillar node
>>>>
>>>>                 Regards,
>>>>                 Peter
>>>>
>>>>
>>>>                 On 03.06.2015 20:35, John Zhao wrote:
>>>>>                 Hi Peter,
>>>>>
>>>>>                 Could you tell me where is the merging logic?
>>>>>                 That's interesting.
>>>>>
>>>>>                 *Best Regards,*
>>>>>                 *ZhiQiang ZHAO*
>>>>>
>>>>>                 On Wed, Jun 3, 2015 at 12:09 AM, Peter
>>>>>                 <graphhopper at gmx.de <mailto:graphhopper at gmx.de>>
>>>>>                 wrote:
>>>>>
>>>>>                     Hi Jan,
>>>>>
>>>>>                     we do this kind of 'merging' logic already in
>>>>>                     the import step when deciding what should be
>>>>>                     handled as tower node and what is a pillar
>>>>>                     node. Otherwise you'll need as twice as many
>>>>>                     RAM when copying from one graph to the other.
>>>>>
>>>>>
>>>>>                     > Have you made a experiment to count the number of
>>>>>                     2 degree nodes with the equal flags and name
>>>>>                     in OSM?
>>>>>                     > And then we can know how many edges we can save.
>>>>>
>>>>>                     Yes, this should be done before implementing it :)
>>>>>
>>>>>                     And as the merging logic is currently not 100%
>>>>>                     optimal, there could be some minor savings
>>>>>                     even when recognizing the different street
>>>>>                     names, but I'm unsure if it is worth the effort.
>>>>>
>>>>>                     Issues like #234 or #111 will probably make
>>>>>                     more difference.
>>>>>
>>>>>                     Kind Regards,
>>>>>                     Peter
>>>>>
>>>>>
>>>>>                     On 02.06.2015 22:35, John Zhao wrote:
>>>>>>                     Hi,
>>>>>>
>>>>>>                     AFAIK, there is no this kind of merging logic
>>>>>>                     here.
>>>>>>                     Wait the answer from Peter.
>>>>>>                     Probably you need to implement it by your own.
>>>>>>                     And it's not easy. 
>>>>>>                     Maybe can be done before import?
>>>>>>                     What you want, is actually convert a tower
>>>>>>                     node to a pillar node.
>>>>>>
>>>>>>
>>>>>>                     *Best Regards,*
>>>>>>                     *ZhiQiang ZHAO*
>>>>>>
>>>>>>                     On Tue, Jun 2, 2015 at 1:27 PM, Jan Torben
>>>>>>                     Heuer <jan at komoot.de <mailto:jan at komoot.de>>
>>>>>>                     wrote:
>>>>>>
>>>>>>                         Hi ZhiQiang ZHAO,
>>>>>>
>>>>>>                         Thanks for your quick answer.
>>>>>>                         I have a custom FlagEncoder that imports
>>>>>>                         only very few ways and I don’t need the
>>>>>>                         names. I guess, I have mostly nodes with
>>>>>>                         a degree of two.
>>>>>>
>>>>>>                         Jan
>>>>>>
>>>>>>                         Am 02.06.2015 um 21:53 schrieb John Zhao
>>>>>>                         <johnthu at gmail.com
>>>>>>                         <mailto:johnthu at gmail.com>>:
>>>>>>
>>>>>>>                         Hi,
>>>>>>>
>>>>>>>                         Have you made a experiment to count the
>>>>>>>                         number of 2 degree nodes with the equal
>>>>>>>                         flags and name in OSM?
>>>>>>>                         And then we can know how many edges we
>>>>>>>                         can save.
>>>>>>>
>>>>>>>                         I doubt this should be not too much for OSM.
>>>>>>>
>>>>>>>                         *Best Regards,*
>>>>>>>                         *ZhiQiang ZHAO*
>>>>>>>
>>>>>>>                         On Tue, Jun 2, 2015 at 11:59 AM, Jan
>>>>>>>                         Torben Heuer <jan at komoot.de
>>>>>>>                         <mailto:jan at komoot.de>> wrote:
>>>>>>>
>>>>>>>                             Hi,
>>>>>>>
>>>>>>>                             Can Graphhopper merge two ways with
>>>>>>>                             equal flags and name if there is no
>>>>>>>                             intersection between them (no third
>>>>>>>                             way connected)?
>>>>>>>
>>>>>>>                             I would like to create a very
>>>>>>>                             reduces graph with only few edges.
>>>>>>>                             What would be the easiest way to
>>>>>>>                             achieve it? I think I would have to
>>>>>>>                             disable the nameIndex for instance.
>>>>>>>
>>>>>>>                             Thanks,
>>>>>>>
>>>>>>>                             Jan
>>>>>>>
>>>>>
>>>>
>>>
>>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/graphhopper/attachments/20150604/f7dd4050/attachment.html>


More information about the GraphHopper mailing list