<div dir="ltr">Hi Peter,<div><br></div><div>The test case could be:</div><div><br></div><div>clique A ---> node c ---> clique B</div><div><br></div><div>Clique means SCC, like all connected graph.</div><div>node c is a SCC, if we assume a node can reach itself.</div><div><br></div><div>Actually, an extreme case could be:</div><div>node a ---> node b ---> node c</div><div><br></div><div>each node is a SCC.</div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><b>Best Regards,</b><div><b>ZhiQiang ZHAO</b></div></div></div>
<br><div class="gmail_quote">On Wed, Jul 29, 2015 at 3:24 AM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi ZhiQiang,<br>
<br>
the examples you show are SCC of only 1 node, but the original
example is not a SCC I think, as you have an outgoing and an
incoming edge. So I guess this is a bug or something. Maybe you
can provide a failing and small unit test for this so that I can
have a look?<br>
<br>
Also the step 4 is indeed only for informational purposes but will
print new information if the step 3 changed the subnetworks.<br>
<br>
Regards,<br>
Peter<div><div class="h5"><br>
<br>
On 29.07.2015 11:44, John Zhao wrote:<br>
</div></div></div><div><div class="h5">
<blockquote type="cite">
<div dir="ltr">Hi Peter,
<div><br>
</div>
<div>There are a lot of SCC with only 1 node, like: </div>
<div><a href="http://www.openstreetmap.org/node/1707762331" target="_blank">http://www.openstreetmap.org/node/1707762331</a><br>
</div>
<div><a href="http://www.openstreetmap.org/node/386885888" target="_blank">http://www.openstreetmap.org/node/386885888</a><br>
</div>
<div><a href="http://www.openstreetmap.org/node/364825950" target="_blank">http://www.openstreetmap.org/node/364825950</a><br>
</div>
<div><br>
</div>
<div>Step 4 is only to findSubnetwork(), and print some info,
not removal them.</div>
<div>So, step 4 is optional.</div>
<div><br>
</div>
<div>Now I only understand why this happen. :(</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best Regards,</b>
<div><b>ZhiQiang ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On Wed, Jul 29, 2015 at 2:28 AM, Peter
<span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi ZhiQiang,<span><br>
<br>
> And the <a href="http://www.openstreetmap.org/node/678314919" style="font-size:12.8000001907349px" target="_blank">http://www.openstreetmap.org/node/678314919</a> itself
is a SCC. size is 1.<br>
<br>
</span> It shouldn't be a SCC im my opinion - is there a
bug?<br>
If it is not a bug - do you have a suggestion for this,
like avoiding step 4?<br>
<br>
Regards,<br>
Peter
<div>
<div><br>
<br>
<br>
On 29.07.2015 11:18, John Zhao wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">Hi Peter,
<div><br>
</div>
<div>The parameter I set are <span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">minOnewayNetworkSize
= 20, </span><span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">minNetworkSize
= 200</span></div>
<div><br>
</div>
<div>on step 3, despite the node <a href="http://www.openstreetmap.org/node/678314919" style="font-size:12.8000001907349px" target="_blank">http://www.openstreetmap.org/node/678314919</a>,
the inside island is a SCC, and the size is
larger than 20.</div>
<div>So, this island is kept, instead of removal.</div>
<div>And the <a href="http://www.openstreetmap.org/node/678314919" style="font-size:12.8000001907349px" target="_blank">http://www.openstreetmap.org/node/678314919</a> itself
is a SCC. size is 1. Then it was removed.</div>
<div><br>
</div>
<div>Then on step 4, the island is recognized as a
subnetwork, which has size less than 200. </div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best Regards,</b>
<div><b>ZhiQiang ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On Wed, Jul 29, 2015 at
1:04 AM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi ZhiQiang,<br>
<br>
you mean the oneway procedure (step 3)
removes nodes+edges leading to further
normal subnetwork removal in step 4? This
should not happen. The subnetwork should
be removed already in step 3.<span><br>
<br>
<div>> On step 2, although there is a
gate <a href="http://www.openstreetmap.org/node/703042503" target="_blank">http://www.openstreetmap.org/node/703042503</a>
<br>
> on <a href="http://www.openstreetmap.org/way/6374339" target="_blank">http://www.openstreetmap.org/way/6374339</a></div>
</span>
<div><span>> And gate block that edge.<br>
<br>
</span> Because of this gate the island
is a oneway subnetwork (!) and should
get entirely removed in step 2 IMO.<span><br>
<br>
> On step 3, a very important point
are removed due to oneway<br>
<br>
</span></div>
If just one edge/node is removed there is
something wrong. The whole island should
be removed.<br>
<br>
Kind Regards,<br>
Peter
<div>
<div><br>
<br>
On 29.07.2015 09:50, John Zhao wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">Hi Peter,
<div><br>
</div>
<div>I know the difference between
subnetworks and
oneway-subnetworks.</div>
<div>I am talking about the step 2
and step 4, not step 3.</div>
<div><br>
</div>
<div>step 2 and step 4 are both <span style="font-size:12.8000001907349px">findSubnetwork() with the same
parameter.</span><br>
</div>
<div><span style="font-size:12.8000001907349px"> </span><span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">minOnewayNetworkSize
= 20, </span><span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">minNetworkSize
= 200</span><br>
</div>
<div><br>
</div>
<div>I think I figure out why this
discrepancy occurs.</div>
<div>One case is a island in SF bay
area. The island has 2 oneway
roads connected to the main
network. </div>
<div><a href="http://www.openstreetmap.org/way/53726398" target="_blank">http://www.openstreetmap.org/way/53726398</a><br>
</div>
<div><a href="http://www.openstreetmap.org/way/6374339" target="_blank">http://www.openstreetmap.org/way/6374339</a><br>
</div>
<div><br>
</div>
<div>On step 2, although there is a
gate <a href="http://www.openstreetmap.org/node/703042503" target="_blank">http://www.openstreetmap.org/node/703042503</a>
on <a href="http://www.openstreetmap.org/way/6374339" target="_blank">http://www.openstreetmap.org/way/6374339</a></div>
<div>And gate block that edge.</div>
<div>The other oneway is connected <a href="http://www.openstreetmap.org/way/53726398" target="_blank">http://www.openstreetmap.org/way/53726398</a>.</div>
<div>So, this island is connected to
the whole network.</div>
<div><br>
</div>
<div>On step 3, a very important
point are removed due to oneway: <a href="http://www.openstreetmap.org/node/678314919" target="_blank">http://www.openstreetmap.org/node/678314919</a></div>
<div><br>
</div>
<div>Then on step 4, the island are
not connected to the main network.</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best Regards,</b>
<div><b>ZhiQiang ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On Tue, Jul
28, 2015 at 11:12 PM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi ZhiQiang,<br>
<br>
hmmh, not sure if I
understand what is unknown
at your side.<br>
<br>
Subnetworks are different
things than
oneway-subnetworks. For
example 4-5 is a oneway
subnetwork if connect with a
oneway to the main graph
only:<br>
mainGraph->4-5<br>
<br>
And this cannot be detected
in step 2.<br>
<br>
Please have a look at the
unit tests to see more
examples for the different
scenes<br>
<br>
Regards,<br>
Peter
<div>
<div><br>
<br>
On 28.07.2015 20:05,
John Zhao wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">Hi Peter,
<div><br>
</div>
<div>the result I
posted is not the
result of
oneway-subnetwork
procedure.</div>
<div><br>
</div>
<div>The total
procedures include:</div>
<div>1. remove
zero-degree node</div>
<div>2. findSubnetwork</div>
<div>3.
oneway-subnetwork
procedure</div>
<div>4. findSubnetwork
again on
graphhopper.cleanup()</div>
<div><br>
</div>
<div>My question is,
why those islands
are recognized on
step 4, but not on
step 2?</div>
<div><br>
</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On
Tue, Jul 28, 2015 at
12:02 AM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi
ZhiQiang,<br>
<br>
I think it is
because both
networks are
oneway
subnetworks
not found by
the normal
subnetwork
procedure (but
by the
oneway-subnetwork
procedure) and
you defined
the oneway
minimum size
to 20<br>
<br>
Regards,<br>
Peter
<div>
<div><br>
<br>
On 28.07.2015
03:13, John
Zhao wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">Hi
Peter,
<div><br>
</div>
<div>What I do
is:</div>
<div>1. <span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">minOnewayNetworkSize
= 20, </span><span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">minNetworkSize
= 200</span></div>
<div><span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">2.
build san
francisco bay
area osm data</span></div>
<div><span style="color:rgb(0,128,0);font-weight:bold;font-family:Menlo;font-size:12pt">3.
I print out
the
subnetworks
result of the
second call.</span></div>
<div>
<pre style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt"><span style="color:#000080;font-weight:bold">int </span>remainingSubnetworks = preparation.findSubnetworks().size();</pre>
<pre style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt">4. I found the subnetwork has some smaller than 200, like:</pre>
<pre><font color="#000000" face="Menlo"><span style="font-size:16px">subnetwork start from: 37.32611992939085,-121.9961998312816 size: 24</span><span style="font-size:12pt">
</span></font></pre>
<pre><font color="#000000" face="Menlo"><span style="font-size:16px">subnetwork start from: 37.78373608999855,-122.25065187925067 size: 34
</span></font></pre>
<pre><font color="#000000" face="Menlo"><span style="font-size:16px">
</span></font></pre>
<pre><font color="#000000" face="Menlo"><span style="font-size:16px">5. I can't understand why the subnetworks with 24 nodes and 34 nodes are not removed by </span></font><span style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt">preparation.doWork();</span></pre>
<pre><font color="#000000" face="Menlo"><span style="font-size:16px">It call the same method:</span></font></pre>
<pre><pre style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt">Map map = <span style="color:#000080;font-weight:bold">this</span>.findSubnetworks();</pre></pre>
<pre><span style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt">
</span></pre>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On
Mon, Jul 27,
2015 at 12:54
PM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi John,<br>
<br>
sorry, I do
not understand
your problem
or question
here. Would
you describe
it again step
by step for me
:) ?<br>
<br>
Kind Regards,<br>
Peter
<div>
<div><br>
<br>
On 27.07.2015
21:45, John
Zhao wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">Hi
Peter,
<div><br>
</div>
<div>Thanks.</div>
<div>Actually
I only have 1
flagEncoder in
the <span style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt;background-color:rgb(228,228,255)">EncodingManager.</span></div>
<div>The call
is exact
same, <span style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt;white-space:pre-wrap">preparation.findSubnetworks()</span><br>
</div>
<div>
<pre style="white-space:pre-wrap;color:rgb(0,0,0);font-family:Menlo;font-size:12pt">preparation.findSubnetworks() using edgeFilter which is also from singleEncoder.</pre>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On
Sun, Jul 26,
2015 at 7:56
AM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Hi John,<br>
<br>
it should not
be related to
calling these
method twice.
It is just one
time where you
calculate the
subnetworks
independent of
any
FlagEncoder or
direction via
findSubnetworks
and the second
pass is
FlagEncoder-
and
access-dependent
via
removeDeadEndUnvisitedNetworks.<br>
<br>
Regards,<br>
Peter
<div>
<div><br>
<br>
On 24.07.2015
21:16, John
Zhao wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">Hi
Peter,
<div><br>
</div>
<div>I am
still
confused.</div>
<div>at first
we call </div>
<div><span style="color:rgb(0,0,0);font-family:Menlo;font-size:16px">map
=
findSubnetworks();</span><br>
</div>
<div><span style="color:rgb(0,0,0);font-family:Menlo;font-size:16px"><br>
</span></div>
<div><span style="color:rgb(0,0,0);font-family:Menlo;font-size:16px">after
the cleanup,
we call the
same method in
Graphhopper.</span></div>
<div>
<pre style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt"><span style="color:#000080;font-weight:bold">int </span>remainingSubnetworks = preparation.findSubnetworks().size();</pre>
<pre style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt">Why the subnetwork was recognized the latter time, but not the first time?</pre>
<pre style="color:rgb(0,0,0);font-family:Menlo;font-size:12pt">we remove some edges make it not connected?</pre>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On
Thu, Jul 23,
2015 at 2:22
PM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<div bgcolor="#FFFFFF" text="#000000">
Hi ZhiQiang,<br>
<br>
yes, according
to the wiki
this is
wrongly
mapped:<br>
<i> Avoid
tagging
highway
intersections
as that does
not make clear
which way has
the
impediment. </i><br>
<br>
<a href="http://wiki.openstreetmap.org/wiki/Tag:barrier%3Dgate" target="_blank">http://wiki.openstreetmap.org/wiki/Tag:barrier%3Dgate</a><span><font color="#888888"><br>
<br>
Peter</font></span>
<div>
<div><br>
<br>
<div>On
23.07.2015
23:16, John
Zhao wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi
Peter,
<div><br>
</div>
<div>Maybe the
following one
related with <a href="https://github.com/graphhopper/graphhopper/issues/388#issuecomment-88066385" target="_blank">https://github.com/graphhopper/graphhopper/issues/388#issuecomment-88066385</a> </div>
<div><br>
</div>
<div>
<div style="font-size:12.8000001907349px">I
have a look
at 37.32611992939085,-121.9961998312816.</div>
<div style="font-size:12.8000001907349px">It
seesm related
with
barrier=gate
at
intersection.</div>
<div style="font-size:12.8000001907349px"><a href="http://www.openstreetmap.org/node/1126492194" target="_blank">http://www.openstreetmap.org/node/1126492194</a></div>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On
Thu, Jul 23,
2015 at 2:11
PM, Peter <span dir="ltr"><<a href="mailto:graphhopper@gmx.de" target="_blank">graphhopper@gmx.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<div bgcolor="#FFFFFF" text="#000000">
There are two
types of
subnetworks
and the
smaller ones
seems to be
'one-way
subnetworks'
which means
they are eg.
only reachable
as destination
or start. But
if you would
start from a
destination-only
subnetwork
you'll get
'not found'
for all points
outside of
this network.<br>
<br>
Regards,<br>
Peter
<div>
<div><br>
<br>
<div>On
23.07.2015
23:03, John
Zhao wrote:<br>
</div>
</div>
</div>
<blockquote type="cite">
<div>
<div>
<div dir="ltr">Interesting,
<div>when I
increase <span style="font-size:12.8000001907349px">minOnewayNetworkSize from 20 to 50,
the following
two
disappeared.</span></div>
<div>
<div style="font-size:12.8000001907349px">subnetwork
start from:
37.32611992939085,-121.9961998312816
size: 24</div>
<div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">subnetwork start from:
37.78373608999855,-122.</span><span style="font-size:12.8000001907349px">25065187925067 size: 34</span></div>
</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
<br>
<div class="gmail_quote">On
Thu, Jul 23,
2015 at 1:55
PM, John Zhao
<span dir="ltr"><<a href="mailto:johnthu@gmail.com" target="_blank">johnthu@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi,
<div><br>
</div>
<div>I tried
car flag
encoder with
following
parameter on
San Francisco
bay area data
from mapzen.</div>
<div><a href="https://s3.amazonaws.com/metro-extracts.mapzen.com/san-francisco-bay_california.osm.pbf" target="_blank">https://s3.amazonaws.com/metro-extracts.mapzen.com/san-francisco-bay_california.osm.pbf</a></div>
<div><br>
</div>
<div>
<div>minNetworkSize=200</div>
<div>minOnewayNetworkSize=20</div>
<div><br>
</div>
<div>I printed
all the
remaining
subnetworks.</div>
<div>
<div>edges:
591932, nodes
437420, there
were 3496
subnetworks.
removed them
=> 13121
less nodes.
Remaining
subnetworks:5</div>
<div>The
remaining
subnetworks
are:</div>
<div>subnetwork
start from:
37.32611992939085,-121.9961998312816
size: 24</div>
<div>subnetwork
start from:
37.56018439442332,-122.30257814308803
size: 436637</div>
<div>subnetwork
start from:
37.78373608999855,-122.25065187925067
size: 34</div>
<div>subnetwork
start from:
38.180185962770565,-121.70631393878864
size: 301</div>
<div>subnetwork
start from:
37.85717050411933,-122.07633641532816
size: 424</div>
</div>
<div><br>
</div>
<div>I don't
understand why
there is still
subnetwork
less than 200
nodes.</div>
<div><br>
</div>
<div>I have a
look
at 37.32611992939085,-121.9961998312816.</div>
<div>It seesm
related with
barrier=gate
at
intersection.</div>
<div><a href="http://www.openstreetmap.org/node/1126492194" target="_blank">http://www.openstreetmap.org/node/1126492194</a><br>
</div>
<div><br>
</div>
<div>
<div>
<div><b>Best
Regards,</b>
<div><b>ZhiQiang
ZHAO</b></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
<br>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
<br>
</div></div></div>
<br>_______________________________________________<br>
GraphHopper mailing list<br>
<a href="mailto:GraphHopper@openstreetmap.org">GraphHopper@openstreetmap.org</a><br>
<a href="https://lists.openstreetmap.org/listinfo/graphhopper" rel="noreferrer" target="_blank">https://lists.openstreetmap.org/listinfo/graphhopper</a><br>
<br></blockquote></div><br></div>