Fixing origin (0,0) tests
This commit is contained in:
parent
3f039f59de
commit
6eab47d768
@ -156,7 +156,7 @@ public:
|
|||||||
|
|
||||||
bool FindPhantomNodeForCoordinate( const _Coordinate & location, PhantomNode & resultNode, const unsigned zoomLevel) {
|
bool FindPhantomNodeForCoordinate( const _Coordinate & location, PhantomNode & resultNode, const unsigned zoomLevel) {
|
||||||
bool ignoreTinyComponents = (zoomLevel <= 14);
|
bool ignoreTinyComponents = (zoomLevel <= 14);
|
||||||
// INFO("ZoomLevel: " << zoomLevel << ", ignoring tinyComponentents: " << (ignoreTinyComponents ? "yes" : "no"));
|
// INFO("Coordinate: " << location << ", zoomLevel: " << zoomLevel << ", ignoring tinyComponentents: " << (ignoreTinyComponents ? "yes" : "no"));
|
||||||
// double time1 = get_timestamp();
|
// double time1 = get_timestamp();
|
||||||
bool foundNode = false;
|
bool foundNode = false;
|
||||||
const _Coordinate startCoord(100000*(lat2y(static_cast<double>(location.lat)/100000.)), location.lon);
|
const _Coordinate startCoord(100000*(lat2y(static_cast<double>(location.lat)/100000.)), location.lon);
|
||||||
@ -166,7 +166,9 @@ public:
|
|||||||
const int lowerBoundForLoop = (fileIndex < 32768 ? 0 : -32768);
|
const int lowerBoundForLoop = (fileIndex < 32768 ? 0 : -32768);
|
||||||
for(int j = lowerBoundForLoop; (j < (32768+1)) && (fileIndex != UINT_MAX); j+=32768) {
|
for(int j = lowerBoundForLoop; (j < (32768+1)) && (fileIndex != UINT_MAX); j+=32768) {
|
||||||
for(int i = -1; i < 2; ++i){
|
for(int i = -1; i < 2; ++i){
|
||||||
|
// unsigned oldSize = candidates.size();
|
||||||
GetContentsOfFileBucketEnumerated(fileIndex+i+j, candidates);
|
GetContentsOfFileBucketEnumerated(fileIndex+i+j, candidates);
|
||||||
|
// INFO("Getting fileIndex=" << fileIndex+i+j << " with " << candidates.size() - oldSize << " candidates");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_GridEdge smallestEdge;
|
_GridEdge smallestEdge;
|
||||||
@ -179,6 +181,7 @@ public:
|
|||||||
continue;
|
continue;
|
||||||
r = 0.;
|
r = 0.;
|
||||||
tmpDist = ComputeDistance(startCoord, candidate.startCoord, candidate.targetCoord, tmp, &r);
|
tmpDist = ComputeDistance(startCoord, candidate.startCoord, candidate.targetCoord, tmp, &r);
|
||||||
|
// INFO("Looking at edge " << candidate.edgeBasedNode << " at distance " << tmpDist);
|
||||||
if(tmpDist < dist && !DoubleEpsilonCompare(dist, tmpDist)) {
|
if(tmpDist < dist && !DoubleEpsilonCompare(dist, tmpDist)) {
|
||||||
// INFO("a) " << candidate.edgeBasedNode << ", dist: " << tmpDist << ", tinyCC: " << (candidate.belongsToTinyComponent ? "yes" : "no"));
|
// INFO("a) " << candidate.edgeBasedNode << ", dist: " << tmpDist << ", tinyCC: " << (candidate.belongsToTinyComponent ? "yes" : "no"));
|
||||||
dist = tmpDist;
|
dist = tmpDist;
|
||||||
@ -225,7 +228,8 @@ public:
|
|||||||
resultNode.weight2 -= resultNode.weight1;
|
resultNode.weight2 -= resultNode.weight1;
|
||||||
}
|
}
|
||||||
resultNode.ratio = ratio;
|
resultNode.ratio = ratio;
|
||||||
// INFO("New weight1: " << resultNode.weight1 << ", new weight2: " << resultNode.weight2 << ", ratio: " << ratio);
|
// INFO("New weight1: " << resultNode.weight1 << ", new weight2: " << resultNode.weight2 << ", ratio: " << ratio);
|
||||||
|
// INFO("start: " << edgeStartCoord << ", end: " << edgeEndCoord);
|
||||||
// INFO("selected node: " << resultNode.edgeBasedNode << ", bidirected: " << (resultNode.isBidirected() ? "yes" : "no") << "\n--");
|
// INFO("selected node: " << resultNode.edgeBasedNode << ", bidirected: " << (resultNode.isBidirected() ? "yes" : "no") << "\n--");
|
||||||
// double time2 = get_timestamp();
|
// double time2 = get_timestamp();
|
||||||
// INFO("NN-Lookup in " << 1000*(time2-time1) << "ms");
|
// INFO("NN-Lookup in " << 1000*(time2-time1) << "ms");
|
||||||
@ -466,7 +470,7 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline double ComputeDistance(const _Coordinate& inputPoint, const _Coordinate& source, const _Coordinate& target, _Coordinate& nearest, double *r) {
|
inline double ComputeDistance(const _Coordinate& inputPoint, const _Coordinate& source, const _Coordinate& target, _Coordinate& nearest, double *r) {
|
||||||
|
// INFO("comparing point " << inputPoint << " to edge [" << source << "-" << target << "]");
|
||||||
const double x = static_cast<double>(inputPoint.lat);
|
const double x = static_cast<double>(inputPoint.lat);
|
||||||
const double y = static_cast<double>(inputPoint.lon);
|
const double y = static_cast<double>(inputPoint.lon);
|
||||||
const double a = static_cast<double>(source.lat);
|
const double a = static_cast<double>(source.lat);
|
||||||
@ -474,6 +478,7 @@ private:
|
|||||||
const double c = static_cast<double>(target.lat);
|
const double c = static_cast<double>(target.lat);
|
||||||
const double d = static_cast<double>(target.lon);
|
const double d = static_cast<double>(target.lon);
|
||||||
double p,q,mX,nY;
|
double p,q,mX,nY;
|
||||||
|
// INFO("x=" << x << ", y=" << y << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d);
|
||||||
if(fabs(a-c) > FLT_EPSILON){
|
if(fabs(a-c) > FLT_EPSILON){
|
||||||
const double m = (d-b)/(c-a); // slope
|
const double m = (d-b)/(c-a); // slope
|
||||||
// Projection of (x,y) on line joining (a,b) and (c,d)
|
// Projection of (x,y) on line joining (a,b) and (c,d)
|
||||||
@ -486,7 +491,9 @@ private:
|
|||||||
}
|
}
|
||||||
nY = (d*p - c*q)/(a*d - b*c);
|
nY = (d*p - c*q)/(a*d - b*c);
|
||||||
mX = (p - nY*a)/c;// These values are actually n/m+n and m/m+n , we neednot calculate the values of m an n as we are just interested in the ratio
|
mX = (p - nY*a)/c;// These values are actually n/m+n and m/m+n , we neednot calculate the values of m an n as we are just interested in the ratio
|
||||||
*r = mX;
|
// INFO("p=" << p << ", q=" << q << ", nY=" << nY << ", mX=" << mX);
|
||||||
|
*r = std::isnan(mX) ? 0. : mX;
|
||||||
|
// INFO("r=" << *r);
|
||||||
if(*r<=0.){
|
if(*r<=0.){
|
||||||
nearest.lat = source.lat;
|
nearest.lat = source.lat;
|
||||||
nearest.lon = source.lon;
|
nearest.lon = source.lon;
|
||||||
|
@ -53,7 +53,7 @@ Feature: Routing close to the [0,0] origin
|
|||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | distance |
|
| from | to | route | distance |
|
||||||
| b | d | abcde | 200m +-1 |
|
| b | d | abcde | 200m +-2 |
|
||||||
| d | b | | |
|
| d | b | | |
|
||||||
|
|
||||||
Scenario: North-south oneways crossing the origin
|
Scenario: North-south oneways crossing the origin
|
||||||
@ -71,5 +71,5 @@ Feature: Routing close to the [0,0] origin
|
|||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | distance |
|
| from | to | route | distance |
|
||||||
| b | d | abcde | 200m +-1 |
|
| b | d | abcde | 200m +-2 |
|
||||||
| d | b | | |
|
| d | b | | |
|
||||||
|
Loading…
Reference in New Issue
Block a user