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:
parent
94cfb4aad7
commit
5637c2f92a
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
@ -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));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user