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
This commit is contained in:
Dennis Luxen 2010-09-30 15:40:48 +00:00
parent 94cfb4aad7
commit 5637c2f92a
6 changed files with 23 additions and 19 deletions

View File

@ -75,7 +75,9 @@ public:
bool shortcut : 1; bool shortcut : 1;
bool forward : 1; bool forward : 1;
bool backward : 1; bool backward : 1;
short type; short type:6;
bool forwardTurn:1;
bool backwardTurn:1;
_MiddleName middleName; _MiddleName middleName;
} data; } data;

View File

@ -295,24 +295,20 @@ public:
} }
} }
/* check if its possible to turn at the end of an edge */
template< class InputEdge > template< class InputEdge >
void ComputeTurnInfoVector(std::vector< InputEdge >& inputEdges, std::vector<bool> * forwardTurnInfo, std::vector<bool> * backwardTurnInfo) void ComputeTurnInfoVector( std::vector< InputEdge >& inputEdges ) {
{
forwardTurnInfo->resize(inputEdges.size(), false);
backwardTurnInfo->resize(inputEdges.size(), false);
for(unsigned n = 0; n < inputEdges.size(); n++) { for(unsigned n = 0; n < inputEdges.size(); n++) {
if(inputEdges[n].data.forward) if(inputEdges[n].data.forward) {
{
NodeID target = inputEdges[n].target; NodeID target = inputEdges[n].target;
if(_graph->BeginEdges(target)+1 < _graph->EndEdges(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; NodeID source = inputEdges[n].source;
if(_graph->BeginEdges(source)+1 < _graph->EndEdges(source)) { if(_graph->BeginEdges(source)+1 < _graph->EndEdges(source)) {
backwardTurnInfo->at(n) = true; inputEdges[n].data.backwardTurn = true;
} }
} }
} }

View File

@ -113,6 +113,8 @@ void readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) {
bool shortcut; bool shortcut;
bool forward; bool forward;
bool backward; bool backward;
bool forwardTurn;
bool backwardTurn;
short type; short type;
NodeID middle; NodeID middle;
NodeID source; NodeID source;
@ -120,6 +122,8 @@ void readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) {
in.read((char *)&(distance), sizeof(int)); in.read((char *)&(distance), sizeof(int));
assert(distance > 0); assert(distance > 0);
in.read((char *)&(forwardTurn), sizeof(bool));
in.read((char *)&(backwardTurn), sizeof(bool));
in.read((char *)&(shortcut), sizeof(bool)); in.read((char *)&(shortcut), sizeof(bool));
in.read((char *)&(forward), sizeof(bool)); in.read((char *)&(forward), sizeof(bool));
in.read((char *)&(backward), sizeof(bool)); in.read((char *)&(backward), sizeof(bool));
@ -128,6 +132,7 @@ void readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) {
in.read((char *)&(source), sizeof(NodeID)); in.read((char *)&(source), sizeof(NodeID));
in.read((char *)&(target), 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.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; g.data = e; g.source = source; g.target = target;
edgeList->push_back(g); edgeList->push_back(g);

View File

@ -144,11 +144,7 @@ int main (int argc, char *argv[])
cleanup->GetData(cleanedEdgeList); cleanup->GetData(cleanedEdgeList);
cout << "computing turn vector info ..." << flush; cout << "computing turn vector info ..." << flush;
vector<bool> * forwardTurnInfo = new vector<bool>(); contractor->ComputeTurnInfoVector(cleanedEdgeList);
vector<bool> * backwardTurnInfo = new vector<bool>();
contractor->ComputeTurnInfoVector(cleanedEdgeList, forwardTurnInfo, backwardTurnInfo);
assert(backwardTurnInfo->size() == forwardTurnInfo->size());
//todo: serialize info somewhere
cout << "ok" << endl; cout << "ok" << endl;
ofstream edgeOutFile(edgeOut, ios::binary); ofstream edgeOutFile(edgeOut, ios::binary);
@ -176,7 +172,12 @@ int main (int argc, char *argv[])
NodeID target = it->target; NodeID target = it->target;
short type = it->data.type; short type = it->data.type;
bool forwardTurn = it->data.forwardTurn;
bool backwardTurn = it->data.backwardTurn;
edgeOutFile.write((char *)&(distance), sizeof(int)); 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 *)&(shortcut), sizeof(bool));
edgeOutFile.write((char *)&(forward), sizeof(bool)); edgeOutFile.write((char *)&(forward), sizeof(bool));
edgeOutFile.write((char *)&(backward), sizeof(bool)); edgeOutFile.write((char *)&(backward), sizeof(bool));
@ -190,7 +191,5 @@ int main (int argc, char *argv[])
delete cleanup; delete cleanup;
delete contractor; delete contractor;
delete forwardTurnInfo;
delete backwardTurnInfo;
cout << "finished" << endl; cout << "finished" << endl;
} }

View File

@ -268,6 +268,9 @@ int main (int argc, char *argv[])
int ferryIndex = settings.indexInAccessListOf("ferry"); int ferryIndex = settings.indexInAccessListOf("ferry");
assert(ferryIndex != -1); assert(ferryIndex != -1);
if(eit->type == ferryIndex)
cout << "ferry index: " << ferryIndex << endl;
switch(eit->direction) switch(eit->direction)
{ {
case _Way::notSure: case _Way::notSure:

View File

@ -80,7 +80,6 @@ int main (int argc, char *argv[])
namesInStream.read((char *)&size, sizeof(unsigned)); namesInStream.read((char *)&size, sizeof(unsigned));
vector<unsigned> * nameIndex = new vector<unsigned>(size, 0); vector<unsigned> * nameIndex = new vector<unsigned>(size, 0);
vector<string> * names = new vector<string>(); vector<string> * names = new vector<string>();
// names->push_back("");
for(int i = 0; i<size; i++) for(int i = 0; i<size; i++)
namesInStream.read((char *)&(nameIndex->at(i)), sizeof(unsigned)); namesInStream.read((char *)&(nameIndex->at(i)), sizeof(unsigned));