本文整理汇总了C++中NBEdgeCont::joinSameNodeConnectingEdges方法的典型用法代码示例。如果您正苦于以下问题:C++ NBEdgeCont::joinSameNodeConnectingEdges方法的具体用法?C++ NBEdgeCont::joinSameNodeConnectingEdges怎么用?C++ NBEdgeCont::joinSameNodeConnectingEdges使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NBEdgeCont
的用法示例。
在下文中一共展示了NBEdgeCont::joinSameNodeConnectingEdges方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: EdgeVector
void
NBNodeCont::joinSimilarEdges(NBDistrictCont& dc, NBEdgeCont& ec, NBTrafficLightLogicCont& tlc) {
// magic values
SUMOReal distanceThreshold = 7; // don't merge edges further apart
SUMOReal lengthThreshold = 0.05; // don't merge edges with higher relative length-difference
for (NodeCont::iterator i = myNodes.begin(); i != myNodes.end(); i++) {
// count the edges to other nodes outgoing from the current node
std::map<NBNode*, EdgeVector> connectionCount;
const EdgeVector& outgoing = (*i).second->getOutgoingEdges();
for (EdgeVector::const_iterator j = outgoing.begin(); j != outgoing.end(); j++) {
NBEdge* e = (*j);
NBNode* connected = e->getToNode();
if (connectionCount.find(connected) == connectionCount.end()) {
connectionCount[connected] = EdgeVector();
}
connectionCount[connected].push_back(e);
}
// check whether more than a single edge connect another node and join them
std::map<NBNode*, EdgeVector>::iterator k;
for (k = connectionCount.begin(); k != connectionCount.end(); k++) {
// possibly we do not have anything to join...
if ((*k).second.size() < 2) {
continue;
}
// for the edges that seem to be a single street,
// check whether the geometry is similar
const EdgeVector& ev = (*k).second;
const NBEdge* const first = ev.front();
EdgeVector::const_iterator jci; // join candidate iterator
for (jci = ev.begin() + 1; jci != ev.end(); ++jci) {
const SUMOReal relativeLengthDifference = fabs(first->getLoadedLength() - (*jci)->getLoadedLength()) / first->getLoadedLength();
if ((!first->isNearEnough2BeJoined2(*jci, distanceThreshold)) ||
(relativeLengthDifference > lengthThreshold) ||
(first->getSpeed() != (*jci)->getSpeed())
// @todo check vclass
) {
break;
}
}
// @bug If there are 3 edges of which 2 can be joined, no joining will
// take place with the current implementation
if (jci == ev.end()) {
ec.joinSameNodeConnectingEdges(dc, tlc, ev);
}
}
}
}