From 5637c2f92a1bbdf5e796bfc8b4d81a57f5addd2d Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 30 Sep 2010 15:40:48 +0000 Subject: [PATCH] BREAKING CHANGE, REPROCESS YOUR OSM FILES Information if its possible at all to turn at the end of edges is propagated through the complete toolchain --- Contractor/ContractionCleanup.h | 4 +++- Contractor/Contractor.h | 16 ++++++---------- Contractor/GraphLoader.h | 5 +++++ createHierarchy.cpp | 13 ++++++------- extractLargeNetwork.cpp | 3 +++ routed.cpp | 1 - 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/Contractor/ContractionCleanup.h b/Contractor/ContractionCleanup.h index c198dee92..9961ba71c 100644 --- a/Contractor/ContractionCleanup.h +++ b/Contractor/ContractionCleanup.h @@ -75,7 +75,9 @@ public: bool shortcut : 1; bool forward : 1; bool backward : 1; - short type; + short type:6; + bool forwardTurn:1; + bool backwardTurn:1; _MiddleName middleName; } data; diff --git a/Contractor/Contractor.h b/Contractor/Contractor.h index 250a922b0..ed045bb86 100644 --- a/Contractor/Contractor.h +++ b/Contractor/Contractor.h @@ -295,24 +295,20 @@ public: } } + /* check if its possible to turn at the end of an edge */ template< class InputEdge > - void ComputeTurnInfoVector(std::vector< InputEdge >& inputEdges, std::vector * forwardTurnInfo, std::vector * backwardTurnInfo) - { - forwardTurnInfo->resize(inputEdges.size(), false); - backwardTurnInfo->resize(inputEdges.size(), false); + void ComputeTurnInfoVector( std::vector< InputEdge >& inputEdges ) { for(unsigned n = 0; n < inputEdges.size(); n++) { - if(inputEdges[n].data.forward) - { + if(inputEdges[n].data.forward) { NodeID target = inputEdges[n].target; if(_graph->BeginEdges(target)+1 < _graph->EndEdges(target)) { - forwardTurnInfo->at(n) = true; + inputEdges[n].data.forwardTurn = true; } } - if(inputEdges[n].data.backward) - { + if(inputEdges[n].data.backward) { NodeID source = inputEdges[n].source; if(_graph->BeginEdges(source)+1 < _graph->EndEdges(source)) { - backwardTurnInfo->at(n) = true; + inputEdges[n].data.backwardTurn = true; } } } diff --git a/Contractor/GraphLoader.h b/Contractor/GraphLoader.h index 0bed2b72f..955a619a3 100644 --- a/Contractor/GraphLoader.h +++ b/Contractor/GraphLoader.h @@ -113,6 +113,8 @@ void readHSGRFromStream(istream &in, vector * edgeList) { bool shortcut; bool forward; bool backward; + bool forwardTurn; + bool backwardTurn; short type; NodeID middle; NodeID source; @@ -120,6 +122,8 @@ void readHSGRFromStream(istream &in, vector * edgeList) { in.read((char *)&(distance), sizeof(int)); assert(distance > 0); + in.read((char *)&(forwardTurn), sizeof(bool)); + in.read((char *)&(backwardTurn), sizeof(bool)); in.read((char *)&(shortcut), sizeof(bool)); in.read((char *)&(forward), sizeof(bool)); in.read((char *)&(backward), sizeof(bool)); @@ -128,6 +132,7 @@ void readHSGRFromStream(istream &in, vector * edgeList) { in.read((char *)&(source), sizeof(NodeID)); in.read((char *)&(target), sizeof(NodeID)); e.backward = backward; e.distance = distance; e.forward = forward; e.middleName.middle = middle; e.shortcut = shortcut; e.type = type; + e.forwardTurn = forwardTurn; e.backwardTurn = backwardTurn; g.data = e; g.source = source; g.target = target; edgeList->push_back(g); diff --git a/createHierarchy.cpp b/createHierarchy.cpp index 898a6d100..988ede6b9 100644 --- a/createHierarchy.cpp +++ b/createHierarchy.cpp @@ -144,11 +144,7 @@ int main (int argc, char *argv[]) cleanup->GetData(cleanedEdgeList); cout << "computing turn vector info ..." << flush; - vector * forwardTurnInfo = new vector(); - vector * backwardTurnInfo = new vector(); - contractor->ComputeTurnInfoVector(cleanedEdgeList, forwardTurnInfo, backwardTurnInfo); - assert(backwardTurnInfo->size() == forwardTurnInfo->size()); - //todo: serialize info somewhere + contractor->ComputeTurnInfoVector(cleanedEdgeList); cout << "ok" << endl; ofstream edgeOutFile(edgeOut, ios::binary); @@ -176,7 +172,12 @@ int main (int argc, char *argv[]) NodeID target = it->target; short type = it->data.type; + bool forwardTurn = it->data.forwardTurn; + bool backwardTurn = it->data.backwardTurn; + edgeOutFile.write((char *)&(distance), sizeof(int)); + edgeOutFile.write((char *)&(forwardTurn), sizeof(bool)); + edgeOutFile.write((char *)&(backwardTurn), sizeof(bool)); edgeOutFile.write((char *)&(shortcut), sizeof(bool)); edgeOutFile.write((char *)&(forward), sizeof(bool)); edgeOutFile.write((char *)&(backward), sizeof(bool)); @@ -190,7 +191,5 @@ int main (int argc, char *argv[]) delete cleanup; delete contractor; - delete forwardTurnInfo; - delete backwardTurnInfo; cout << "finished" << endl; } diff --git a/extractLargeNetwork.cpp b/extractLargeNetwork.cpp index b7f859903..5f2c9774c 100644 --- a/extractLargeNetwork.cpp +++ b/extractLargeNetwork.cpp @@ -268,6 +268,9 @@ int main (int argc, char *argv[]) int ferryIndex = settings.indexInAccessListOf("ferry"); assert(ferryIndex != -1); + if(eit->type == ferryIndex) + cout << "ferry index: " << ferryIndex << endl; + switch(eit->direction) { case _Way::notSure: diff --git a/routed.cpp b/routed.cpp index fee85f86c..9562377cb 100644 --- a/routed.cpp +++ b/routed.cpp @@ -80,7 +80,6 @@ int main (int argc, char *argv[]) namesInStream.read((char *)&size, sizeof(unsigned)); vector * nameIndex = new vector(size, 0); vector * names = new vector(); -// names->push_back(""); for(int i = 0; iat(i)), sizeof(unsigned));