<div dir="ltr"><div class="gmail_extra"><div class="gmail_extra"><div class="gmail_extra"><div class="gmail_extra">hello<br><br>i want to find all possible paths from some start point while going in a single direction.</div><div class="gmail_extra">first forward then optionally also backward. also i want to have on each edge distance and travel time.<br><br>i home i understand correctly <br>const EdgeWeight weight = GetEdgeData(edge).distance;<br>is travel time in ms.<br><br>but something is wrong </div><div class="gmail_extra">the coordinates results from GetCoordinateOfNode </div><div class="gmail_extra">are too distant from the "from" coordinate and so the result is wrong.<br><br>i tested viaroute command and the routing worked correctly.<br><br>how to get coordinates or a phantom node of a node id?<br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br>Simon.<br><br></div><div class="gmail_extra"><div class="gmail_extra">#ifndef WAYS_HPP</div><div class="gmail_extra">#define WAYS_HPP</div><div class="gmail_extra"><br></div><div class="gmail_extra">#include "plugin_base.hpp"</div><div class="gmail_extra"><br></div><div class="gmail_extra">#include "../util/json_renderer.hpp"</div><div class="gmail_extra">#include "../util/string_util.hpp"</div><div class="gmail_extra"><br></div><div class="gmail_extra">#include <osrm/json_container.hpp></div><div class="gmail_extra">#include <algorithm></div><div class="gmail_extra">#include <string></div><div class="gmail_extra">#include <vector></div><div class="gmail_extra"><br></div><div class="gmail_extra">// locates the nearest node in the road network for a given coordinate.</div><div class="gmail_extra">template <class DataFacadeT> class WaysPlugin final : public BasePlugin</div><div class="gmail_extra">{</div><div class="gmail_extra">  public:</div><div class="gmail_extra">    explicit WaysPlugin(DataFacadeT *facade) : descriptor_string("ways"), facade(facade) {}</div><div class="gmail_extra">    const std::string GetDescriptor() const override final { return descriptor_string; }</div><div class="gmail_extra"><br></div><div class="gmail_extra">    int HandleRequest(const RouteParameters &route_parameters,</div><div class="gmail_extra">                      osrm::json::Object &json_result) override final</div><div class="gmail_extra">    {</div><div class="gmail_extra">        // check number of parameters</div><div class="gmail_extra">        if (route_parameters.coordinates.empty() ||</div><div class="gmail_extra">            !route_parameters.coordinates.front().is_valid())</div><div class="gmail_extra">        {</div><div class="gmail_extra">            return 400;</div><div class="gmail_extra">        }</div><div class="gmail_extra"><br></div><div class="gmail_extra">        FixedPointCoordinate snapped_coordinate;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">         </span>auto input_coordinate=route_parameters.coordinates.front();</div><div class="gmail_extra">        if (!facade->LocateClosestEndPointForCoordinate(input_coordinate, snapped_coordinate))</div><div class="gmail_extra">        {</div><div class="gmail_extra">            json_result.values["status"] = 207;</div><div class="gmail_extra">        }</div><div class="gmail_extra">        else</div><div class="gmail_extra">        {</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">           </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>//////</div><div class="gmail_extra">            //bool allow_uturn = false;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>//auto input_coordinate=route_parameters.coordinates.front();</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                  </span>PhantomNode node_at_coordinate;</div><div class="gmail_extra">            facade->IncrementalFindPhantomNodeForCoordinate(snapped_coordinate,node_at_coordinate);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>std::cout << "FindPhantomNodeForCoordinate: " << node_at_coordinate << '\n';</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>std::vector<NodeID> stack;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>std::vector<std::vector<NodeID>> results;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                  </span>NodeID  from;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                 </span>from=node_at_coordinate.reverse_node_id;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>recourceNodeIds(from,0,stack,results,node_at_coordinate);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>/*</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                     </span>NodeID  from=node_at_coordinate.forward_node_id;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span>for (auto edge : facade->GetAdjacentEdgeRange(from))</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>const NodeID target = GetTarget(edge);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span>const EdgeWeight weight = GetEdgeData(edge).distance;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                  </span>}</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>NodeID  from=node_at_coordinate.reverse_node_id;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span>for (auto edge : facade->GetAdjacentEdgeRange(from))</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>const NodeID target = GetTarget(edge);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span>const EdgeWeight weight = GetEdgeData(edge).distance;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                  </span>}</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span>*/</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                     </span>/*</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                             </span>struct EdgeData {</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                      </span>NodeID id : 31;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                        </span>bool shortcut : 1;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                     </span>int distance : 30;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                     </span>bool forward : 1;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                      </span>bool backward : 1;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                             </span>}</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span>*/</div><div class="gmail_extra">            </div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                     </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>///////</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                        </span></div><div class="gmail_extra">            json_result.values["status"] = 0;</div><div class="gmail_extra">            osrm::json::Array json_coordinate;</div><div class="gmail_extra">            json_coordinate.values.push_back(snapped_coordinate.lat / COORDINATE_PRECISION);</div><div class="gmail_extra">            json_coordinate.values.push_back(snapped_coordinate.lon / COORDINATE_PRECISION);</div><div class="gmail_extra">            json_result.values["mapped_coordinate"] = json_coordinate;</div><div class="gmail_extra">        }</div><div class="gmail_extra">        return 200;</div><div class="gmail_extra">    }</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre"> </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">       </span>void recourceNodeIds(NodeID from,int totaldistance,std::vector<NodeID> &stack,std::vector<std::vector<NodeID>> &results,PhantomNode node_at_coordinate)</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span>if(totaldistance>60000)</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                     </span>{</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>std::vector<NodeID> saved_stack;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span>saved_stack=stack;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                             </span>results.push_back(saved_stack);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                </span>return;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                      </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>auto nodename=facade->get_name_for_id(node_at_coordinate.name_id);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                  </span>std::cout << "nodename: " << nodename << '\n' ;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                            </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                       </span>for (auto edge : facade->GetAdjacentEdgeRange(from))</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>const NodeID target = facade->GetTarget(edge);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>//const EdgeWeight weight = facade->GetEdgeData(edge).distance;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                             </span>auto data=facade->GetEdgeData(edge);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                </span>auto coordinate_of_from=facade->GetCoordinateOfNode(from);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                          </span>auto coordinate_of_node=facade->GetCoordinateOfNode(target);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                                </span>auto nameofedgeid=facade->GetNameIndexFromEdgeID(<a href="http://data.id">data.id</a>);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                               </span>auto nameofedge=facade->get_name_for_id(nameofedgeid);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>std::cout << "GetEdgeData: " ;</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                               </span>std::cout  << "from: "<< from <<", target: "<<target</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span><<", id: " << <a href="http://data.id">data.id</a> << ", "</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span><< "shortcut: " << data.shortcut << ", "</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span><< "distance: " << data.distance << ", "</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span><< "forward: " << data.forward << ", "</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                           </span><< "backward: " << data.backward <<", "</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                          </span><< "coordinate_of_node: " << coordinate_of_node <<", "</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                           </span><< "coordinate_of_from: " << coordinate_of_from</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                          </span><< "nameofedge: " << nameofedge</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                          </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                               </span><< '\n';</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                         </span></div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                               </span>// if not in history array then recourse:</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>//if(std::find(stack.begin(), stack.end(), target)!=stack.end()) </div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                             </span>//{</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                            </span>//<span class="Apple-tab-span" style="white-space:pre">  </span>stack.push_back(target);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                               </span>//<span class="Apple-tab-span" style="white-space:pre">  </span>recourceNodeIds(target,totaldistance+weight,stack,results);</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                            </span>//<span class="Apple-tab-span" style="white-space:pre">  </span>stack.pop_back();</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                              </span>//}</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">                    </span>}</div><div class="gmail_extra"><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div class="gmail_extra"><br></div><div class="gmail_extra">  private:</div><div class="gmail_extra">    std::string descriptor_string;</div><div class="gmail_extra">    DataFacadeT *facade;</div><div class="gmail_extra">};</div><div class="gmail_extra"><br></div><div class="gmail_extra">#endif /* WAYS_HPP */</div><div><br></div></div></div></div></div></div>