我有我的城市的 osm 文件,我正在使用 Libosmium 来读取它,并且我将每种方式的节点存储为我的图形的顶点,并在每种方式的每个 2 个相邻节点之间制作边,并计算它们之间的欧几里德距离。
问题是:
这些方式没有相互连接!即使谷歌地图中有一条路线,我也无法从源头到达目的地,但是路径之间没有节点相交(没有公共节点),所以我无法到达目的地!我应该将哪些节点添加到我的图表中,以及如何正确桥接它们?所以我可以从我的节点到达我的目的地?
我用来创建边缘的代码如下
// Loop the Whole Map of Ways
for ( it = MyWayMap.begin(); it != MyWayMap.end(); it++ ){
WayCounter++;
NodesOfWayIndex = 0; //reset Index
//define a vector of nodes with size of Way
vector<Vertex> WayNodes(it->second.nodeRefList.size());
//======================================================
// Loop The Nodes of Each way
for(auto j = it->second.nodeRefList.begin(); j != it->second.nodeRefList.end(); ++j){
VertexID = it->second.nodeRefList.at(NodesOfWayIndex);
//declare Variable for Eucledean Distance
double dist = 0;
WayNodes[NodesOfWayIndex] = VertexID ;
//---------------------------------------------------------------------
// if the VertexId doesn't exist yet give back do the following
if(BelalMap.find(VertexID) == BelalMap.end()){
// assign idType values to the idmap
//idmap[IdMapIndex] = VertexID;
IdMapIndex++;
// Fill BelalMap
BelalMap.insert({VertexID,IdMapIndex});
if(NodesOfWayIndex == 0) Node1 = IdMapIndex;
else {
Node2 = IdMapIndex ;
dist = distance(WayNodes[NodesOfWayIndex - 1], WayNodes[NodesOfWayIndex]);
add_edge(Node1, Node2,dist,MyGraph);
add_edge(Node2, Node1,dist,MyGraph);
Node1 = Node2 ;
} // end else
}//end of outer if
//--------------------------------------------------------------------
//if the VertexId already exists give back it's Vertex number
else {
if(NodesOfWayIndex == 0) Node1 = BelalMap.find(VertexID)->second;
else {
// Calculating Eucledan Distance Between Nodes
dist = distance(WayNodes[NodesOfWayIndex - 1], WayNodes[NodesOfWayIndex]);
Node2 = BelalMap.find(VertexID)->second;
add_edge(Node1, Node2,dist,MyGraph);
add_edge(Node2, Node1,dist,MyGraph);
Node1 = Node2 ;
}// end of inner else
}//end of outer else
//======================================================
// increase The indexs after iterating each node.
NodesOfWayIndex++;
}// end of Nodes of Way Loop
}// end of Ways of Map Loop