<div dir="ltr"><div><span style="font-family:'Courier New',courier,monaco,monospace,sans-serif;font-size:11px">Hi Everybody,</span><span style="font-family:Arial,Helvetica,sans-serif;font-size:13px"><br></span></div>
<span style="font-family:Arial,Helvetica,sans-serif;font-size:13px">I downloaded routing data for VietNam map, But it's not working.</span><br style="font-family:Arial,Helvetica,sans-serif;font-size:13px"><span style="font-family:Arial,Helvetica,sans-serif;font-size:13px">Can you help me to resolve the issues related to routing data of </span><span style="font-family:Arial,Helvetica,sans-serif;font-size:13px">VietNam </span><span style="font-family:Arial,Helvetica,sans-serif;font-size:13px">?</span><br>
<div><br></div><div><font face="Arial, Helvetica, sans-serif">Thank ,</font></div><div><font face="Arial, Helvetica, sans-serif">Doanh</font></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-03-28 20:43 GMT+07:00 Bruno Carle <span dir="ltr"><<a href="mailto:brunocarle@yahoo.com" target="_blank">brunocarle@yahoo.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:8pt;font-family:Courier New,courier,monaco,monospace,sans-serif"><div><span style="background-color:transparent;font-size:8pt">Thanks everybody for your comments.</span><br>
</div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif"><span style="background-color:transparent;font-size:8pt"><br></span></div>
<div style="background-color:transparent">At the moment I would like to be able to blacklist both nodes and edges, so I will stick with the ExtendedStorage.</div><div style="background-color:transparent"><br></div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif">
I have hacked an implementation for blacklisting nodes, but there are a
 couple of things which are not clear to me.</div><div style="background-color:transparent"><br></div><div style="background-color:transparent">I created a class OSMReaderWithOsmIds which overrides addNode:</div><div style="background-color:transparent">
<br></div><div style="background-color:transparent">   @Override</div><div style="background-color:transparent">   boolean addNode(OSMNode node ){</div><div style="background-color:transparent"><span style="white-space:pre-wrap">       </span>if (super.addNode(node)){</div>
<div style="background-color:transparent"><span style="white-space:pre-wrap">   </span>    int nodeId=super.getNodeMap().get(<a href="http://node.id" target="_blank">node.id</a>);</div><div style="background-color:transparent">
(A)         if (nodeId>0) {</div><div style="background-color:transparent">              <span style="white-space:pre-wrap">               </span>((OsmIdsExtendedStorage)getGraphStorage().</div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif">
                 getExtendedStorage()).<span style="background-color:transparent">setNodeOsmId(nodeId, node.getId());</span></div><div style="background-color:transparent"><span style="background-color:transparent;font-size:8pt;white-space:pre-wrap"> </span><span style="background-color:transparent;font-size:8pt">    }</span></div>
<div style="background-color:transparent"><span style="white-space:pre-wrap">   </span>    return true;</div><div style="background-color:transparent"><span style="white-space:pre-wrap">        </span>} else</div><div style="background-color:transparent">
<span style="white-space:pre-wrap">     </span>    return false;</div><div style="background-color:transparent">   }</div><div style="background-color:transparent"><br></div><div style="background-color:transparent"><br></div>
<div style="background-color:transparent">where OsmIdsExtendedStorage has:</div><div style="background-color:transparent"><br></div><div style="background-color:transparent">    public int getEntryIndex(int nodeIndex){</div>
<div style="background-color:transparent">   <span style="white-space:pre-wrap">      </span>return graph.getAdditionalNodeField(nodeIndex);</div><div style="background-color:transparent">    }</div><div style="background-color:transparent">
<br></div><div style="background-color:transparent">    public int createNewEntry(int nodeIndex){</div><div style="background-color:transparent"> 
  <span style="white-space:pre-wrap">  </span> // create new entry</div><div style="background-color:transparent">       int newEntryIndex = count;</div><div style="background-color:transparent">       count++;</div><div style="background-color:transparent">
       ensureEntryIndex(newEntryIndex);</div><div style="background-color:transparent">(B)    graph.setAdditionalNodeField(nodeIndex, newEntryIndex);</div><div style="background-color:transparent">       return newEntryIndex;</div>
<div style="background-color:transparent">   }</div><div style="background-color:transparent"><br></div><div style="background-color:transparent">    public void setNodeOsmId(int nodeIndex,long osmId){</div><div style="background-color:transparent">
<span style="white-space:pre-wrap">     </span>int
 entryIdx=getEntryIndex(nodeIndex);</div><div style="background-color:transparent"><span style="white-space:pre-wrap">    </span>if (entryIdx==NO_ENTRY){</div><div style="background-color:transparent"><span style="background-color:transparent;font-size:8pt">       </span><span style="background-color:transparent;font-size:8pt;white-space:pre-wrap">      </span>    <span style="background-color:transparent;font-size:8pt">int newEntryIndex =createNewEntry(nodeIndex);</span><br>
</div><div style="background-color:transparent">            // now populate the entry</div><div style="background-color:transparent">            dataAccess.setBytes(newEntryIndex*entrySize,BitUtil.BIG.fromLong(osmId),entrySize);</div>
<div style="background-color:transparent"><span style="white-space:pre-wrap">
        </span>}</div><div style="background-color:transparent">    }</div><div style="background-color:transparent"><br></div><div style="background-color:transparent">The first problem I have is that when the nodeId is from a tower node, the nodeId (A) is negative and I can not use this value in <span style="background-color:transparent;font-size:8pt">graph.setAdditionalNodeField() (B). I dont know if this is intended (i.e. graph.setAdditionalNodeField can only be used on pillar nodes) or it is that I am using it incorrectly)</span></div>
<div style="background-color:transparent"><br></div><div style="background-color:transparent">Another problem is that I don't see graph.setAdditionalEdgeField, which I believe i need for storing the OSM id of an edge . I guess I will just try to implement it</div>
<div style="background-color:transparent"><br></div><div style="background-color:transparent">Last problem (for now ;) ) is that we
 can store only one int in setAdditionalNodeField, but I would like to use both the TurnCostStorage and the OsmIdsExtendedStorage. I have the impression that one way to achieve it would be to allocate for the additionalNodeField several ints (one per extended storage) instead of just one. Or is there a better way?</div>
<div style="background-color:transparent"> </div><div style="background-color:transparent">Thanks </div><div style="background-color:transparent">Bruno</div><div><br></div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif">
<br></div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif"><br></div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif">
<br></div><div style="font-style:normal;font-size:11px;background-color:transparent;font-family:'Courier New',courier,monaco,monospace,sans-serif"><br></div>  <div style="font-family:'Courier New',courier,monaco,monospace,sans-serif;font-size:8pt">
 <div style="font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-size:12pt"> <div dir="ltr"> <hr size="1">  <font face="Arial"> <b><span style="font-weight:bold">From:</span></b> Philipp Hamm <Philipp.Hamm@Optitool.DE><br>
 <b><span style="font-weight:bold">To:</span></b> GraphHopper Java routing engine <<a href="mailto:graphhopper@openstreetmap.org" target="_blank">graphhopper@openstreetmap.org</a>> <br> <b><span style="font-weight:bold">Sent:</span></b> Friday, March 28, 2014 9:44 AM<br>
 <b><span style="font-weight:bold">Subject:</span></b> Re: [GraphHopper] ExtendedStorage for OSM
 ids<br> </font> </div> <div><div><div class="h5"><br><div><div><div><div><span style="font-size:11.0pt">Hi,<br clear="none">integer is still big enough for way ids (which are currently < 270.000.000) and so int should suffice for a very long time. <br clear="none">
however if you need node ids too, one field is too small.<br clear="none"><br clear="none">regards,<br clear="none">Philipp</span></div><div><span style="font-size:11.0pt">  </span></div><div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<div><b><span style="font-size:10.0pt">Von:</span></b><span style="font-size:10.0pt"> Karl Hübner [mailto:<a href="mailto:evilhack@gmx.de" target="_blank">evilhack@gmx.de</a>] <br clear="none"><b>Gesendet:</b> Donnerstag, 27. März 2014 22:50<br clear="none">
<b>An:</b> Bruno Carle; GraphHopper Java routing
 engine<br clear="none"><b>Betreff:</b> Re: [GraphHopper] ExtendedStorage for OSM ids</span></div></div><div>  </div><div style="margin-bottom:12.0pt">Hey Bruno, <br clear="none">the extended storage is a quite new feature, so I think you have to implement it by yourself. Since osmIds are of type long but the additional fields for edges and nodes are of type int, you have to use additional storages and let the additional fields point at its entries. I think Peter can tell you where you can find helper methods in order to split a long value into two integer values. But you're right, looking at my code in TurnCostStorage should help you. Fell free to ask if you have further questions.<br clear="none">
Best regards, Karl. <br clear="none"><br clear="none">Bruno Carle <<a rel="nofollow" shape="rect" href="mailto:brunocarle@yahoo.com" target="_blank">brunocarle@yahoo.com</a>> schrieb:</div><div><div><div style="background:white">
<span style="font-size:8.0pt">Hi everybody,</span></div></div><div><div style="background:white"><span style="font-size:8.0pt">I would like to retrieve the osmIds from edges and/or nodes in order to be able to blacklist some paths. </span></div>
</div><div><div style="background:white"><span style="font-size:8.0pt">The blacklist will change often, so I can not put it inside a FlagEncoder as I would have to reimport every time.</span></div></div><div><div style="background:white">
<span style="font-size:8.0pt">I think another way is using an ExtendedStorage that would store the OSM ids. Please does anyone have one running?</span></div></div><div><div style="background:white"><span style="font-size:8.0pt">If not I will try to implement it, probably copying the ideas from the TurnCostStorage in khuebner/graphhopper.</span></div>
</div><div><div style="background:white"><span style="font-size:8.0pt">Thanks</span></div></div><div><div style="background:white"><span style="font-size:8.0pt">Bruno</span></div></div></div></div></div></div></div><br></div>
</div><div>_______________________________________________<br clear="none">GraphHopper mailing list<br clear="none"><a shape="rect" href="mailto:GraphHopper@openstreetmap.org" target="_blank">GraphHopper@openstreetmap.org</a><br clear="none">
<a shape="rect" href="https://lists.openstreetmap.org/listinfo/graphhopper" target="_blank">https://lists.openstreetmap.org/listinfo/graphhopper</a><br clear="none"></div><br><br></div> </div>
 </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" target="_blank">https://lists.openstreetmap.org/listinfo/graphhopper</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><br>Trân trọng,<br><br>Tran Dang Doanh<br> M: (84) 943438338 E: <a href="mailto:dangdoanh.sp@gmail.com" target="_blank">dangdoanh.sp@gmail.com</a><br>
</div>
</div>