Merging changes from develop branch to prepare for v.0.3.6 branch
Conflicts: README.TXT
This commit is contained in:
commit
d3dee115ab
5
.gitignore
vendored
5
.gitignore
vendored
@ -37,6 +37,7 @@ Thumbs.db
|
|||||||
#######################
|
#######################
|
||||||
/build/
|
/build/
|
||||||
/Util/UUID.cpp
|
/Util/UUID.cpp
|
||||||
|
/Util/GitDescription.cpp
|
||||||
|
|
||||||
# Eclipse related files #
|
# Eclipse related files #
|
||||||
#########################
|
#########################
|
||||||
@ -81,3 +82,7 @@ stxxl.errlog
|
|||||||
/sandbox/
|
/sandbox/
|
||||||
|
|
||||||
/test/profile.lua
|
/test/profile.lua
|
||||||
|
|
||||||
|
# Deprecated config file #
|
||||||
|
##########################
|
||||||
|
/server.ini
|
||||||
|
@ -4,7 +4,7 @@ compiler:
|
|||||||
# - clang
|
# - clang
|
||||||
install:
|
install:
|
||||||
- sudo apt-get update >/dev/null
|
- sudo apt-get update >/dev/null
|
||||||
- sudo apt-get -q install build-essential git cmake pkg-config libprotoc-dev libprotobuf7 protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev libzip-dev libboost-thread-dev libboost-system-dev libboost-regex-dev libboost-filesystem-dev lua5.1 liblua5.1-0-dev libluabind-dev rubygems osmosis
|
- sudo apt-get -q install libprotoc-dev libprotobuf7 protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev libzip-dev libboost1.46-all-dev lua5.1 liblua5.1-0-dev libluabind-dev rubygems osmosis
|
||||||
before_script:
|
before_script:
|
||||||
- sudo gem install bundler
|
- sudo gem install bundler
|
||||||
- bundle install
|
- bundle install
|
||||||
|
11
AUTHORS.TXT
11
AUTHORS.TXT
@ -1,11 +0,0 @@
|
|||||||
The following people contributed code to the Open Source Routing Machine:
|
|
||||||
|
|
||||||
Christian Vetter
|
|
||||||
Dennis Luxen
|
|
||||||
Ruslan Krenzler
|
|
||||||
Frederik Ramm
|
|
||||||
Bharath Vissapragada
|
|
||||||
Pascal Neis
|
|
||||||
Sasa Ivetic
|
|
||||||
Emil Tin
|
|
||||||
Henning Moll
|
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BRESENHAM_H_
|
#ifndef BRESENHAM_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CRC32.h"
|
#include "CRC32.h"
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CRC32_H_
|
#ifndef CRC32_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DOUGLASPEUCKER_H_
|
#ifndef DOUGLASPEUCKER_H_
|
||||||
@ -23,9 +30,11 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
|
|
||||||
#include "../DataStructures/Coordinate.h"
|
#include "../DataStructures/Coordinate.h"
|
||||||
|
|
||||||
#include <cassert>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cfloat>
|
|
||||||
|
#include <limits>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -45,7 +54,7 @@ class DouglasPeucker {
|
|||||||
private:
|
private:
|
||||||
typedef std::pair<std::size_t, std::size_t> PairOfPoints;
|
typedef std::pair<std::size_t, std::size_t> PairOfPoints;
|
||||||
//Stack to simulate the recursion
|
//Stack to simulate the recursion
|
||||||
std::stack<PairOfPoints > recursionStack;
|
std::stack<PairOfPoints > recursion_stack;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This distance computation does integer arithmetic only and is about twice as fast as
|
* This distance computation does integer arithmetic only and is about twice as fast as
|
||||||
@ -56,12 +65,13 @@ private:
|
|||||||
const int p2x = (segB.lon - segA.lat);
|
const int p2x = (segB.lon - segA.lat);
|
||||||
const int p2y = (segB.lon - segA.lat);
|
const int p2y = (segB.lon - segA.lat);
|
||||||
const int something = p2x*p2x + p2y*p2y;
|
const int something = p2x*p2x + p2y*p2y;
|
||||||
int u = (something < FLT_EPSILON ? 0 : ((point.lon - segA.lon) * p2x + (point.lat - segA.lat) * p2y) / something);
|
int u = ( 0 == something ? 0 : ((point.lon - segA.lon) * p2x + (point.lat - segA.lat) * p2y) / something);
|
||||||
|
|
||||||
if (u > 1)
|
if (u > 1) {
|
||||||
u = 1;
|
u = 1;
|
||||||
else if (u < 0)
|
} else if (u < 0) {
|
||||||
u = 0;
|
u = 0;
|
||||||
|
}
|
||||||
|
|
||||||
const int x = segA.lon + u * p2x;
|
const int x = segA.lon + u * p2x;
|
||||||
const int y = segA.lat + u * p2y;
|
const int y = segA.lat + u * p2y;
|
||||||
@ -76,52 +86,82 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Run(std::vector<PointT> & inputVector, const unsigned zoomLevel) {
|
void Run(std::vector<PointT> & input_geometry, const unsigned zoom_level) {
|
||||||
{
|
{
|
||||||
assert(zoomLevel < 19);
|
BOOST_ASSERT_MSG(zoom_level < 19, "unsupported zoom level");
|
||||||
assert(1 < inputVector.size());
|
BOOST_ASSERT_MSG(1 < input_geometry.size(), "geometry invalid");
|
||||||
std::size_t leftBorderOfRange = 0;
|
std::size_t left_border = 0;
|
||||||
std::size_t rightBorderOfRange = 1;
|
std::size_t right_border = 1;
|
||||||
//Sweep linerarily over array and identify those ranges that need to be checked
|
//Sweep linerarily over array and identify those ranges that need to be checked
|
||||||
// recursionStack.hint(inputVector.size());
|
|
||||||
do {
|
do {
|
||||||
assert(inputVector[leftBorderOfRange].necessary);
|
BOOST_ASSERT_MSG(
|
||||||
assert(inputVector.back().necessary);
|
input_geometry[left_border].necessary,
|
||||||
|
"left border must be necessary"
|
||||||
|
);
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
input_geometry.back().necessary,
|
||||||
|
"right border must be necessary"
|
||||||
|
);
|
||||||
|
|
||||||
if(inputVector[rightBorderOfRange].necessary) {
|
if(input_geometry[right_border].necessary) {
|
||||||
recursionStack.push(std::make_pair(leftBorderOfRange, rightBorderOfRange));
|
recursion_stack.push(std::make_pair(left_border, right_border));
|
||||||
leftBorderOfRange = rightBorderOfRange;
|
left_border = right_border;
|
||||||
}
|
}
|
||||||
++rightBorderOfRange;
|
++right_border;
|
||||||
} while( rightBorderOfRange < inputVector.size());
|
} while( right_border < input_geometry.size());
|
||||||
}
|
}
|
||||||
while(!recursionStack.empty()) {
|
while(!recursion_stack.empty()) {
|
||||||
//pop next element
|
//pop next element
|
||||||
const PairOfPoints pair = recursionStack.top();
|
const PairOfPoints pair = recursion_stack.top();
|
||||||
recursionStack.pop();
|
recursion_stack.pop();
|
||||||
assert(inputVector[pair.first].necessary);
|
BOOST_ASSERT_MSG(
|
||||||
assert(inputVector[pair.second].necessary);
|
input_geometry[pair.first].necessary,
|
||||||
assert(pair.second < inputVector.size());
|
"left border mus be necessary"
|
||||||
assert(pair.first < pair.second);
|
);
|
||||||
int maxDistance = INT_MIN;
|
BOOST_ASSERT_MSG(
|
||||||
|
input_geometry[pair.second].necessary,
|
||||||
|
"right border must be necessary"
|
||||||
|
);
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
pair.second < input_geometry.size(),
|
||||||
|
"right border outside of geometry"
|
||||||
|
);
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
pair.first < pair.second,
|
||||||
|
"left border on the wrong side"
|
||||||
|
);
|
||||||
|
int max_distance = INT_MIN;
|
||||||
|
|
||||||
std::size_t indexOfFarthestElement = pair.second;
|
std::size_t farthest_element_index = pair.second;
|
||||||
//find index idx of element with maxDistance
|
//find index idx of element with max_distance
|
||||||
for(std::size_t i = pair.first+1; i < pair.second; ++i){
|
for(std::size_t i = pair.first+1; i < pair.second; ++i){
|
||||||
const double distance = std::fabs(fastDistance(inputVector[i].location, inputVector[pair.first].location, inputVector[pair.second].location));
|
const int temp_dist = fastDistance(
|
||||||
if(distance > DouglasPeuckerThresholds[zoomLevel] && distance > maxDistance) {
|
input_geometry[i].location,
|
||||||
indexOfFarthestElement = i;
|
input_geometry[pair.first].location,
|
||||||
maxDistance = distance;
|
input_geometry[pair.second].location
|
||||||
|
);
|
||||||
|
const double distance = std::fabs(temp_dist);
|
||||||
|
if(
|
||||||
|
distance > DouglasPeuckerThresholds[zoom_level] &&
|
||||||
|
distance > max_distance
|
||||||
|
) {
|
||||||
|
farthest_element_index = i;
|
||||||
|
max_distance = distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (maxDistance > DouglasPeuckerThresholds[zoomLevel]) {
|
if (max_distance > DouglasPeuckerThresholds[zoom_level]) {
|
||||||
// mark idx as necessary
|
// mark idx as necessary
|
||||||
inputVector[indexOfFarthestElement].necessary = true;
|
input_geometry[farthest_element_index].necessary = true;
|
||||||
if (1 < indexOfFarthestElement - pair.first) {
|
if (1 < (farthest_element_index - pair.first) ) {
|
||||||
recursionStack.push(std::make_pair(pair.first, indexOfFarthestElement) );
|
recursion_stack.push(
|
||||||
|
std::make_pair(pair.first, farthest_element_index)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (1 < (pair.second - farthest_element_index) ) {
|
||||||
|
recursion_stack.push(
|
||||||
|
std::make_pair(farthest_element_index, pair.second)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (1 < pair.second - indexOfFarthestElement)
|
|
||||||
recursionStack.push(std::make_pair(indexOfFarthestElement, pair.second) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef ITERATORBASEDCRC32_H_
|
#ifndef ITERATORBASEDCRC32_H_
|
||||||
#define ITERATORBASEDCRC32_H_
|
#define ITERATORBASEDCRC32_H_
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef OBJECTTOBASE64_H_
|
#ifndef OBJECTTOBASE64_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef POLYLINECOMPRESSOR_H_
|
#ifndef POLYLINECOMPRESSOR_H_
|
||||||
|
@ -1,23 +1,27 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
along with this program; if not, write to the Free Software
|
of conditions and the following disclaimer.
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
Strongly connected components using Tarjan's Algorithm
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -35,11 +39,13 @@ Strongly connected components using Tarjan's Algorithm
|
|||||||
|
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
|
|
||||||
|
#include <boost/assert.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/integer.hpp>
|
#include <boost/integer.hpp>
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/unordered_map.hpp>
|
#include <boost/unordered_map.hpp>
|
||||||
|
#include <boost/unordered_set.hpp>
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <gdal.h>
|
#include <gdal.h>
|
||||||
@ -48,7 +54,7 @@ Strongly connected components using Tarjan's Algorithm
|
|||||||
#include <gdal/gdal.h>
|
#include <gdal/gdal.h>
|
||||||
#include <gdal/ogrsf_frmts.h>
|
#include <gdal/ogrsf_frmts.h>
|
||||||
#endif
|
#endif
|
||||||
#include <cassert>
|
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -64,7 +70,6 @@ private:
|
|||||||
|
|
||||||
struct TarjanEdgeData {
|
struct TarjanEdgeData {
|
||||||
int distance;
|
int distance;
|
||||||
unsigned edgeBasedNodeID;
|
|
||||||
unsigned nameID:31;
|
unsigned nameID:31;
|
||||||
bool shortcut:1;
|
bool shortcut:1;
|
||||||
short type;
|
short type;
|
||||||
@ -77,7 +82,10 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct TarjanStackFrame {
|
struct TarjanStackFrame {
|
||||||
explicit TarjanStackFrame(NodeID _v, NodeID p) : v(_v), parent(p) {}
|
explicit TarjanStackFrame(
|
||||||
|
NodeID v,
|
||||||
|
NodeID parent
|
||||||
|
) : v(v), parent(parent) { }
|
||||||
NodeID v;
|
NodeID v;
|
||||||
NodeID parent;
|
NodeID parent;
|
||||||
};
|
};
|
||||||
@ -85,18 +93,17 @@ private:
|
|||||||
typedef DynamicGraph<TarjanEdgeData> TarjanDynamicGraph;
|
typedef DynamicGraph<TarjanEdgeData> TarjanDynamicGraph;
|
||||||
typedef TarjanDynamicGraph::InputEdge TarjanEdge;
|
typedef TarjanDynamicGraph::InputEdge TarjanEdge;
|
||||||
typedef std::pair<NodeID, NodeID> RestrictionSource;
|
typedef std::pair<NodeID, NodeID> RestrictionSource;
|
||||||
typedef std::pair<NodeID, bool> RestrictionTarget;
|
typedef std::pair<NodeID, bool> restriction_target;
|
||||||
typedef std::vector<RestrictionTarget> EmanatingRestrictionsVector;
|
typedef std::vector<restriction_target> EmanatingRestrictionsVector;
|
||||||
typedef boost::unordered_map<RestrictionSource, unsigned > RestrictionMap;
|
typedef boost::unordered_map<RestrictionSource, unsigned > RestrictionMap;
|
||||||
|
|
||||||
std::vector<NodeInfo> inputNodeInfoList;
|
std::vector<NodeInfo> m_coordinate_list;
|
||||||
unsigned numberOfTurnRestrictions;
|
std::vector<EmanatingRestrictionsVector> m_restriction_bucket_list;
|
||||||
boost::shared_ptr<TarjanDynamicGraph> _nodeBasedGraph;
|
boost::shared_ptr<TarjanDynamicGraph> m_node_based_graph;
|
||||||
boost::unordered_map<NodeID, bool> _barrierNodes;
|
boost::unordered_set<NodeID> m_barrier_node_list;
|
||||||
boost::unordered_map<NodeID, bool> _trafficLights;
|
boost::unordered_set<NodeID> m_traffic_light_list;
|
||||||
|
unsigned m_restriction_counter;
|
||||||
std::vector<EmanatingRestrictionsVector> _restrictionBucketVector;
|
RestrictionMap m_restriction_map;
|
||||||
RestrictionMap _restrictionMap;
|
|
||||||
|
|
||||||
struct EdgeBasedNode {
|
struct EdgeBasedNode {
|
||||||
bool operator<(const EdgeBasedNode & other) const {
|
bool operator<(const EdgeBasedNode & other) const {
|
||||||
@ -116,93 +123,99 @@ private:
|
|||||||
bool ignoreInGrid:1;
|
bool ignoreInGrid:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
DeallocatingVector<EdgeBasedNode> edgeBasedNodes;
|
|
||||||
public:
|
public:
|
||||||
TarjanSCC(
|
TarjanSCC(
|
||||||
int nodes,
|
int number_of_nodes,
|
||||||
std::vector<NodeBasedEdge> & inputEdges,
|
std::vector<NodeBasedEdge> & input_edges,
|
||||||
std::vector<NodeID> & bn,
|
std::vector<NodeID> & bn,
|
||||||
std::vector<NodeID> & tl,
|
std::vector<NodeID> & tl,
|
||||||
std::vector<TurnRestriction> & irs,
|
std::vector<TurnRestriction> & irs,
|
||||||
std::vector<NodeInfo> & nI
|
std::vector<NodeInfo> & nI
|
||||||
) :
|
) :
|
||||||
inputNodeInfoList(nI),
|
m_coordinate_list(nI),
|
||||||
numberOfTurnRestrictions(irs.size())
|
m_restriction_counter(irs.size())
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const TurnRestriction & restriction, irs) {
|
BOOST_FOREACH(const TurnRestriction & restriction, irs) {
|
||||||
std::pair<NodeID, NodeID> restrictionSource = std::make_pair(
|
std::pair<NodeID, NodeID> restrictionSource = std::make_pair(
|
||||||
restriction.fromNode, restriction.viaNode
|
restriction.fromNode, restriction.viaNode
|
||||||
);
|
);
|
||||||
unsigned index;
|
unsigned index;
|
||||||
RestrictionMap::iterator restrIter = _restrictionMap.find(restrictionSource);
|
RestrictionMap::iterator restriction_iterator = m_restriction_map.find(restrictionSource);
|
||||||
if(restrIter == _restrictionMap.end()) {
|
if(restriction_iterator == m_restriction_map.end()) {
|
||||||
index = _restrictionBucketVector.size();
|
index = m_restriction_bucket_list.size();
|
||||||
_restrictionBucketVector.resize(index+1);
|
m_restriction_bucket_list.resize(index+1);
|
||||||
_restrictionMap[restrictionSource] = index;
|
m_restriction_map[restrictionSource] = index;
|
||||||
} else {
|
} else {
|
||||||
index = restrIter->second;
|
index = restriction_iterator->second;
|
||||||
//Map already contains an is_only_*-restriction
|
//Map already contains an is_only_*-restriction
|
||||||
if(_restrictionBucketVector.at(index).begin()->second)
|
if(m_restriction_bucket_list.at(index).begin()->second) {
|
||||||
continue;
|
continue;
|
||||||
else if(restriction.flags.isOnly){
|
} else if(restriction.flags.isOnly) {
|
||||||
//We are going to insert an is_only_*-restriction. There can be only one.
|
//We are going to insert an is_only_*-restriction. There can be only one.
|
||||||
_restrictionBucketVector.at(index).clear();
|
m_restriction_bucket_list.at(index).clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_restrictionBucketVector.at(index).push_back(
|
m_restriction_bucket_list.at(index).push_back(
|
||||||
std::make_pair(restriction.toNode, restriction.flags.isOnly)
|
std::make_pair(restriction.toNode, restriction.flags.isOnly)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(NodeID id, bn) {
|
m_barrier_node_list.insert(bn.begin(), bn.end());
|
||||||
_barrierNodes[id] = true;
|
m_traffic_light_list.insert(tl.begin(), tl.end());
|
||||||
}
|
|
||||||
BOOST_FOREACH(NodeID id, tl) {
|
|
||||||
_trafficLights[id] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
DeallocatingVector< TarjanEdge > edges;
|
|
||||||
for ( std::vector< NodeBasedEdge >::const_iterator i = inputEdges.begin(); i != inputEdges.end(); ++i ) {
|
|
||||||
|
|
||||||
|
DeallocatingVector< TarjanEdge > edge_list;
|
||||||
|
BOOST_FOREACH(const NodeBasedEdge & input_edge, input_edges) {
|
||||||
TarjanEdge edge;
|
TarjanEdge edge;
|
||||||
if(!i->isForward()) {
|
if(!input_edge.isForward()) {
|
||||||
edge.source = i->target();
|
edge.source = input_edge.target();
|
||||||
edge.target = i->source();
|
edge.target = input_edge.source();
|
||||||
edge.data.backward = i->isForward();
|
edge.data.backward = input_edge.isForward();
|
||||||
edge.data.forward = i->isBackward();
|
edge.data.forward = input_edge.isBackward();
|
||||||
} else {
|
} else {
|
||||||
edge.source = i->source();
|
edge.source = input_edge.source();
|
||||||
edge.target = i->target();
|
edge.target = input_edge.target();
|
||||||
edge.data.forward = i->isForward();
|
edge.data.forward = input_edge.isForward();
|
||||||
edge.data.backward = i->isBackward();
|
edge.data.backward = input_edge.isBackward();
|
||||||
}
|
}
|
||||||
if(edge.source == edge.target)
|
if(edge.source == edge.target) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
edge.data.distance = (std::max)((int)i->weight(), 1 );
|
edge.data.distance = (std::max)((int)input_edge.weight(), 1 );
|
||||||
assert( edge.data.distance > 0 );
|
BOOST_ASSERT( edge.data.distance > 0 );
|
||||||
edge.data.shortcut = false;
|
edge.data.shortcut = false;
|
||||||
edge.data.roundabout = i->isRoundabout();
|
edge.data.roundabout = input_edge.isRoundabout();
|
||||||
edge.data.ignoreInGrid = i->ignoreInGrid();
|
edge.data.ignoreInGrid = input_edge.ignoreInGrid();
|
||||||
edge.data.nameID = i->name();
|
edge.data.nameID = input_edge.name();
|
||||||
edge.data.type = i->type();
|
edge.data.type = input_edge.type();
|
||||||
edge.data.isAccessRestricted = i->isAccessRestricted();
|
edge.data.isAccessRestricted = input_edge.isAccessRestricted();
|
||||||
edge.data.edgeBasedNodeID = edges.size();
|
|
||||||
edge.data.reversedEdge = false;
|
edge.data.reversedEdge = false;
|
||||||
edges.push_back( edge );
|
edge_list.push_back( edge );
|
||||||
if( edge.data.backward ) {
|
if( edge.data.backward ) {
|
||||||
std::swap( edge.source, edge.target );
|
std::swap( edge.source, edge.target );
|
||||||
edge.data.forward = i->isBackward();
|
edge.data.forward = input_edge.isBackward();
|
||||||
edge.data.backward = i->isForward();
|
edge.data.backward = input_edge.isForward();
|
||||||
edge.data.edgeBasedNodeID = edges.size();
|
|
||||||
edge.data.reversedEdge = true;
|
edge.data.reversedEdge = true;
|
||||||
edges.push_back( edge );
|
edge_list.push_back( edge );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<NodeBasedEdge>().swap(inputEdges);
|
std::vector<NodeBasedEdge>().swap(input_edges);
|
||||||
std::sort( edges.begin(), edges.end() );
|
BOOST_ASSERT_MSG(
|
||||||
_nodeBasedGraph = boost::make_shared<TarjanDynamicGraph>( nodes, edges );
|
0 == input_edges.size() && 0 == input_edges.capacity(),
|
||||||
|
"input edge vector not properly deallocated"
|
||||||
|
);
|
||||||
|
|
||||||
|
std::sort( edge_list.begin(), edge_list.end() );
|
||||||
|
|
||||||
|
m_node_based_graph = boost::make_shared<TarjanDynamicGraph>(
|
||||||
|
number_of_nodes,
|
||||||
|
edge_list
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
~TarjanSCC() {
|
||||||
|
m_node_based_graph.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Run() {
|
void Run() {
|
||||||
@ -211,162 +224,203 @@ public:
|
|||||||
DeleteFileIfExists("component.shx");
|
DeleteFileIfExists("component.shx");
|
||||||
DeleteFileIfExists("component.shp");
|
DeleteFileIfExists("component.shp");
|
||||||
|
|
||||||
Percent p(_nodeBasedGraph->GetNumberOfNodes());
|
Percent p(m_node_based_graph->GetNumberOfNodes());
|
||||||
|
|
||||||
const char *pszDriverName = "ESRI Shapefile";
|
|
||||||
OGRSFDriver *poDriver;
|
|
||||||
|
|
||||||
OGRRegisterAll();
|
OGRRegisterAll();
|
||||||
|
|
||||||
poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(
|
const char *pszDriverName = "ESRI Shapefile";
|
||||||
pszDriverName );
|
OGRSFDriver * poDriver = OGRSFDriverRegistrar::GetRegistrar()->
|
||||||
if( poDriver == NULL )
|
GetDriverByName( pszDriverName );
|
||||||
{
|
if( NULL == poDriver ) {
|
||||||
printf( "%s driver not available.\n", pszDriverName );
|
throw OSRMException("ESRI Shapefile driver not available");
|
||||||
exit( 1 );
|
|
||||||
}
|
}
|
||||||
OGRDataSource *poDS;
|
OGRDataSource * poDS = poDriver->CreateDataSource(
|
||||||
|
"component.shp",
|
||||||
poDS = poDriver->CreateDataSource( "component.shp", NULL );
|
NULL
|
||||||
if( poDS == NULL ) {
|
|
||||||
printf( "Creation of output file failed.\n" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
OGRLayer *poLayer;
|
|
||||||
|
|
||||||
poLayer = poDS->CreateLayer( "component", NULL, wkbLineString, NULL );
|
|
||||||
if( poLayer == NULL ) {
|
|
||||||
printf( "Layer creation failed.\n" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//The following is a hack to distinguish between stuff that happens before the recursive call and stuff that happens after
|
|
||||||
std::stack<std::pair<bool, TarjanStackFrame> > recursionStack; //true = stuff before, false = stuff after call
|
|
||||||
std::stack<NodeID> tarjanStack;
|
|
||||||
std::vector<unsigned> componentsIndex(_nodeBasedGraph->GetNumberOfNodes(), UINT_MAX);
|
|
||||||
std::vector<NodeID> vectorOfComponentSizes;
|
|
||||||
std::vector<TarjanNode> tarjanNodes(_nodeBasedGraph->GetNumberOfNodes());
|
|
||||||
unsigned currentComponent = 0, sizeOfCurrentComponent = 0;
|
|
||||||
int index = 0;
|
|
||||||
for(NodeID node = 0, endNodes = _nodeBasedGraph->GetNumberOfNodes(); node < endNodes; ++node) {
|
|
||||||
if(UINT_MAX == componentsIndex[node]) {
|
|
||||||
recursionStack.push(std::make_pair(true, TarjanStackFrame(node,node)) );
|
|
||||||
}
|
|
||||||
|
|
||||||
while(!recursionStack.empty()) {
|
|
||||||
bool beforeRecursion = recursionStack.top().first;
|
|
||||||
TarjanStackFrame currentFrame = recursionStack.top().second;
|
|
||||||
NodeID v = currentFrame.v;
|
|
||||||
// SimpleLogger().Write() << "popping node " << v << (beforeRecursion ? " before " : " after ") << "recursion";
|
|
||||||
recursionStack.pop();
|
|
||||||
|
|
||||||
if(beforeRecursion) {
|
|
||||||
//Mark frame to handle tail of recursion
|
|
||||||
recursionStack.push(std::make_pair(false, currentFrame));
|
|
||||||
|
|
||||||
//Mark essential information for SCC
|
|
||||||
tarjanNodes[v].index = index;
|
|
||||||
tarjanNodes[v].lowlink = index;
|
|
||||||
tarjanStack.push(v);
|
|
||||||
tarjanNodes[v].onStack = true;
|
|
||||||
++index;
|
|
||||||
// SimpleLogger().Write() << "pushing " << v << " onto tarjan stack, idx[" << v << "]=" << tarjanNodes[v].index << ", lowlink["<< v << "]=" << tarjanNodes[v].lowlink;
|
|
||||||
|
|
||||||
//Traverse outgoing edges
|
|
||||||
for(TarjanDynamicGraph::EdgeIterator e2 = _nodeBasedGraph->BeginEdges(v); e2 < _nodeBasedGraph->EndEdges(v); ++e2) {
|
|
||||||
TarjanDynamicGraph::NodeIterator vprime = _nodeBasedGraph->GetTarget(e2);
|
|
||||||
// SimpleLogger().Write() << "traversing edge (" << v << "," << vprime << ")";
|
|
||||||
if(UINT_MAX == tarjanNodes[vprime].index) {
|
|
||||||
|
|
||||||
recursionStack.push(std::make_pair(true,TarjanStackFrame(vprime, v)));
|
|
||||||
} else {
|
|
||||||
// SimpleLogger().Write() << "Node " << vprime << " is already explored";
|
|
||||||
if(tarjanNodes[vprime].onStack) {
|
|
||||||
unsigned newLowlink = std::min(tarjanNodes[v].lowlink, tarjanNodes[vprime].index);
|
|
||||||
// SimpleLogger().Write() << "Setting lowlink[" << v << "] from " << tarjanNodes[v].lowlink << " to " << newLowlink;
|
|
||||||
tarjanNodes[v].lowlink = newLowlink;
|
|
||||||
// } else {
|
|
||||||
// SimpleLogger().Write() << "But node " << vprime << " is not on stack";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// SimpleLogger().Write() << "we are at the end of recursion and checking node " << v;
|
|
||||||
{ // setting lowlink in its own scope so it does not pollute namespace
|
|
||||||
// NodeID parent = (UINT_MAX == tarjanNodes[v].parent ? v : tarjanNodes[v].parent );
|
|
||||||
// SimpleLogger().Write() << "parent=" << currentFrame.parent;
|
|
||||||
// SimpleLogger().Write() << "tarjanNodes[" << v << "].lowlink=" << tarjanNodes[v].lowlink << ", tarjanNodes[" << currentFrame.parent << "].lowlink=" << tarjanNodes[currentFrame.parent].lowlink;
|
|
||||||
//Note the index shift by 1 compared to the recursive version
|
|
||||||
tarjanNodes[currentFrame.parent].lowlink = std::min(tarjanNodes[currentFrame.parent].lowlink, tarjanNodes[v].lowlink);
|
|
||||||
// SimpleLogger().Write() << "Setting tarjanNodes[" << currentFrame.parent <<"].lowlink=" << tarjanNodes[currentFrame.parent].lowlink;
|
|
||||||
}
|
|
||||||
// SimpleLogger().Write() << "tarjanNodes[" << v << "].lowlink=" << tarjanNodes[v].lowlink << ", tarjanNodes[" << v << "].index=" << tarjanNodes[v].index;
|
|
||||||
|
|
||||||
//after recursion, lets do cycle checking
|
|
||||||
//Check if we found a cycle. This is the bottom part of the recursion
|
|
||||||
if(tarjanNodes[v].lowlink == tarjanNodes[v].index) {
|
|
||||||
NodeID vprime;
|
|
||||||
do {
|
|
||||||
// SimpleLogger().Write() << "identified component " << currentComponent << ": " << tarjanStack.top();
|
|
||||||
vprime = tarjanStack.top(); tarjanStack.pop();
|
|
||||||
tarjanNodes[vprime].onStack = false;
|
|
||||||
componentsIndex[vprime] = currentComponent;
|
|
||||||
++sizeOfCurrentComponent;
|
|
||||||
} while( v != vprime);
|
|
||||||
vectorOfComponentSizes.push_back(sizeOfCurrentComponent);
|
|
||||||
if(sizeOfCurrentComponent > 1000)
|
|
||||||
SimpleLogger().Write() << "large component [" << currentComponent << "]=" << sizeOfCurrentComponent;
|
|
||||||
++currentComponent;
|
|
||||||
sizeOfCurrentComponent = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SimpleLogger().Write() << "identified: " << vectorOfComponentSizes.size() << " many components, marking small components";
|
|
||||||
|
|
||||||
int singleCounter = 0;
|
|
||||||
for(unsigned i = 0; i < vectorOfComponentSizes.size(); ++i){
|
|
||||||
if(1 == vectorOfComponentSizes[i])
|
|
||||||
++singleCounter;
|
|
||||||
}
|
|
||||||
SimpleLogger().Write() << "identified " << singleCounter << " SCCs of size 1";
|
|
||||||
uint64_t total_network_distance = 0;
|
|
||||||
p.reinit(_nodeBasedGraph->GetNumberOfNodes());
|
|
||||||
for(TarjanDynamicGraph::NodeIterator u = 0; u < _nodeBasedGraph->GetNumberOfNodes(); ++u ) {
|
|
||||||
p.printIncrement();
|
|
||||||
for(TarjanDynamicGraph::EdgeIterator e1 = _nodeBasedGraph->BeginEdges(u); e1 < _nodeBasedGraph->EndEdges(u); ++e1) {
|
|
||||||
if(_nodeBasedGraph->GetEdgeData(e1).reversedEdge) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
TarjanDynamicGraph::NodeIterator v = _nodeBasedGraph->GetTarget(e1);
|
|
||||||
|
|
||||||
total_network_distance += 100*ApproximateDistance(
|
|
||||||
inputNodeInfoList[u].lat,
|
|
||||||
inputNodeInfoList[u].lon,
|
|
||||||
inputNodeInfoList[v].lat,
|
|
||||||
inputNodeInfoList[v].lon
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if(_nodeBasedGraph->GetEdgeData(e1).type != SHRT_MAX) {
|
if( NULL == poDS ) {
|
||||||
assert(e1 != UINT_MAX);
|
throw OSRMException("Creation of output file failed");
|
||||||
assert(u != UINT_MAX);
|
}
|
||||||
assert(v != UINT_MAX);
|
|
||||||
|
OGRLayer * poLayer = poDS->CreateLayer(
|
||||||
|
"component",
|
||||||
|
NULL,
|
||||||
|
wkbLineString,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
if( NULL == poLayer ) {
|
||||||
|
throw OSRMException("Layer creation failed.");
|
||||||
|
}
|
||||||
|
|
||||||
|
//The following is a hack to distinguish between stuff that happens
|
||||||
|
//before the recursive call and stuff that happens after
|
||||||
|
std::stack<std::pair<bool, TarjanStackFrame> > recursion_stack;
|
||||||
|
//true = stuff before, false = stuff after call
|
||||||
|
std::stack<NodeID> tarjan_stack;
|
||||||
|
std::vector<unsigned> components_index(
|
||||||
|
m_node_based_graph->GetNumberOfNodes(),
|
||||||
|
UINT_MAX
|
||||||
|
);
|
||||||
|
std::vector<NodeID> component_size_vector;
|
||||||
|
std::vector<TarjanNode> tarjan_node_list(
|
||||||
|
m_node_based_graph->GetNumberOfNodes()
|
||||||
|
);
|
||||||
|
unsigned component_index = 0, size_of_current_component = 0;
|
||||||
|
int index = 0;
|
||||||
|
for(
|
||||||
|
NodeID node = 0, last_node = m_node_based_graph->GetNumberOfNodes();
|
||||||
|
node < last_node;
|
||||||
|
++node
|
||||||
|
) {
|
||||||
|
if(UINT_MAX == components_index[node]) {
|
||||||
|
recursion_stack.push(
|
||||||
|
std::make_pair(true, TarjanStackFrame(node,node))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(!recursion_stack.empty()) {
|
||||||
|
bool before_recursion = recursion_stack.top().first;
|
||||||
|
TarjanStackFrame currentFrame = recursion_stack.top().second;
|
||||||
|
NodeID v = currentFrame.v;
|
||||||
|
recursion_stack.pop();
|
||||||
|
|
||||||
|
if(before_recursion) {
|
||||||
|
//Mark frame to handle tail of recursion
|
||||||
|
recursion_stack.push(std::make_pair(false, currentFrame));
|
||||||
|
|
||||||
|
//Mark essential information for SCC
|
||||||
|
tarjan_node_list[v].index = index;
|
||||||
|
tarjan_node_list[v].lowlink = index;
|
||||||
|
tarjan_stack.push(v);
|
||||||
|
tarjan_node_list[v].onStack = true;
|
||||||
|
++index;
|
||||||
|
|
||||||
|
//Traverse outgoing edges
|
||||||
|
for(
|
||||||
|
TarjanDynamicGraph::EdgeIterator e2 = m_node_based_graph->BeginEdges(v);
|
||||||
|
e2 < m_node_based_graph->EndEdges(v);
|
||||||
|
++e2
|
||||||
|
) {
|
||||||
|
const TarjanDynamicGraph::NodeIterator vprime =
|
||||||
|
m_node_based_graph->GetTarget(e2);
|
||||||
|
if(UINT_MAX == tarjan_node_list[vprime].index) {
|
||||||
|
recursion_stack.push(
|
||||||
|
std::make_pair(
|
||||||
|
true,
|
||||||
|
TarjanStackFrame(vprime, v)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if(
|
||||||
|
tarjan_node_list[vprime].onStack &&
|
||||||
|
tarjan_node_list[vprime].index < tarjan_node_list[v].lowlink
|
||||||
|
) {
|
||||||
|
tarjan_node_list[v].lowlink = tarjan_node_list[vprime].index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tarjan_node_list[currentFrame.parent].lowlink =
|
||||||
|
std::min(
|
||||||
|
tarjan_node_list[currentFrame.parent].lowlink,
|
||||||
|
tarjan_node_list[v].lowlink
|
||||||
|
);
|
||||||
|
//after recursion, lets do cycle checking
|
||||||
|
//Check if we found a cycle. This is the bottom part of the recursion
|
||||||
|
if(tarjan_node_list[v].lowlink == tarjan_node_list[v].index) {
|
||||||
|
NodeID vprime;
|
||||||
|
do {
|
||||||
|
vprime = tarjan_stack.top(); tarjan_stack.pop();
|
||||||
|
tarjan_node_list[vprime].onStack = false;
|
||||||
|
components_index[vprime] = component_index;
|
||||||
|
++size_of_current_component;
|
||||||
|
} while( v != vprime);
|
||||||
|
|
||||||
|
component_size_vector.push_back(size_of_current_component);
|
||||||
|
|
||||||
|
if(size_of_current_component > 1000) {
|
||||||
|
SimpleLogger().Write() <<
|
||||||
|
"large component [" << component_index << "]=" <<
|
||||||
|
size_of_current_component;
|
||||||
|
}
|
||||||
|
|
||||||
|
++component_index;
|
||||||
|
size_of_current_component = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleLogger().Write() <<
|
||||||
|
"identified: " << component_size_vector.size() <<
|
||||||
|
" many components, marking small components";
|
||||||
|
|
||||||
|
unsigned size_one_counter = 0;
|
||||||
|
for(unsigned i = 0, end = component_size_vector.size(); i < end; ++i){
|
||||||
|
if(1 == component_size_vector[i]) {
|
||||||
|
++size_one_counter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleLogger().Write() <<
|
||||||
|
"identified " << size_one_counter << " SCCs of size 1";
|
||||||
|
|
||||||
|
uint64_t total_network_distance = 0;
|
||||||
|
p.reinit(m_node_based_graph->GetNumberOfNodes());
|
||||||
|
for(
|
||||||
|
TarjanDynamicGraph::NodeIterator u = 0, last_u_node = m_node_based_graph->GetNumberOfNodes();
|
||||||
|
u < last_u_node;
|
||||||
|
++u
|
||||||
|
) {
|
||||||
|
p.printIncrement();
|
||||||
|
for(
|
||||||
|
TarjanDynamicGraph::EdgeIterator e1 = m_node_based_graph->BeginEdges(u), last_edge = m_node_based_graph->EndEdges(u);
|
||||||
|
e1 < last_edge;
|
||||||
|
++e1
|
||||||
|
) {
|
||||||
|
if(!m_node_based_graph->GetEdgeData(e1).reversedEdge) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const TarjanDynamicGraph::NodeIterator v = m_node_based_graph->GetTarget(e1);
|
||||||
|
|
||||||
|
total_network_distance += 100*ApproximateDistance(
|
||||||
|
m_coordinate_list[u].lat,
|
||||||
|
m_coordinate_list[u].lon,
|
||||||
|
m_coordinate_list[v].lat,
|
||||||
|
m_coordinate_list[v].lon
|
||||||
|
);
|
||||||
|
|
||||||
|
if( SHRT_MAX != m_node_based_graph->GetEdgeData(e1).type ) {
|
||||||
|
BOOST_ASSERT(e1 != UINT_MAX);
|
||||||
|
BOOST_ASSERT(u != UINT_MAX);
|
||||||
|
BOOST_ASSERT(v != UINT_MAX);
|
||||||
|
|
||||||
|
const unsigned size_of_containing_component =
|
||||||
|
std::min(
|
||||||
|
component_size_vector[components_index[u]],
|
||||||
|
component_size_vector[components_index[v]]
|
||||||
|
);
|
||||||
|
|
||||||
//edges that end on bollard nodes may actually be in two distinct components
|
//edges that end on bollard nodes may actually be in two distinct components
|
||||||
if(std::min(vectorOfComponentSizes[componentsIndex[u]], vectorOfComponentSizes[componentsIndex[v]]) < 10) {
|
if(size_of_containing_component < 10) {
|
||||||
|
|
||||||
//INFO("(" << inputNodeInfoList[u].lat/COORDINATE_PRECISION << ";" << inputNodeInfoList[u].lon/COORDINATE_PRECISION << ") -> (" << inputNodeInfoList[v].lat/COORDINATE_PRECISION << ";" << inputNodeInfoList[v].lon/COORDINATE_PRECISION << ")");
|
|
||||||
OGRLineString lineString;
|
OGRLineString lineString;
|
||||||
lineString.addPoint(inputNodeInfoList[u].lon/COORDINATE_PRECISION, inputNodeInfoList[u].lat/COORDINATE_PRECISION);
|
lineString.addPoint(
|
||||||
lineString.addPoint(inputNodeInfoList[v].lon/COORDINATE_PRECISION, inputNodeInfoList[v].lat/COORDINATE_PRECISION);
|
m_coordinate_list[u].lon/COORDINATE_PRECISION,
|
||||||
OGRFeature *poFeature;
|
m_coordinate_list[u].lat/COORDINATE_PRECISION
|
||||||
poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() );
|
);
|
||||||
|
lineString.addPoint(
|
||||||
|
m_coordinate_list[v].lon/COORDINATE_PRECISION,
|
||||||
|
m_coordinate_list[v].lat/COORDINATE_PRECISION
|
||||||
|
);
|
||||||
|
|
||||||
|
OGRFeature * poFeature = OGRFeature::CreateFeature(
|
||||||
|
poLayer->GetLayerDefn()
|
||||||
|
);
|
||||||
|
|
||||||
poFeature->SetGeometry( &lineString );
|
poFeature->SetGeometry( &lineString );
|
||||||
if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) {
|
if( OGRERR_NONE != poLayer->CreateFeature(poFeature) ) {
|
||||||
throw OSRMException(
|
throw OSRMException(
|
||||||
"Failed to create feature in shapefile."
|
"Failed to create feature in shapefile."
|
||||||
);
|
);
|
||||||
@ -377,39 +431,66 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
OGRDataSource::DestroyDataSource( poDS );
|
OGRDataSource::DestroyDataSource( poDS );
|
||||||
std::vector<NodeID>().swap(vectorOfComponentSizes);
|
std::vector<NodeID>().swap(component_size_vector);
|
||||||
std::vector<NodeID>().swap(componentsIndex);
|
BOOST_ASSERT_MSG(
|
||||||
SimpleLogger().Write() << "total network distance: " << (uint64_t)total_network_distance/100/1000. << " km";
|
0 == component_size_vector.size() &&
|
||||||
|
0 == component_size_vector.capacity(),
|
||||||
|
"component_size_vector not properly deallocated"
|
||||||
|
);
|
||||||
|
|
||||||
|
std::vector<NodeID>().swap(components_index);
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
0 == components_index.size() && 0 == components_index.capacity(),
|
||||||
|
"icomponents_index not properly deallocated"
|
||||||
|
);
|
||||||
|
|
||||||
|
SimpleLogger().Write()
|
||||||
|
<< "total network distance: " <<
|
||||||
|
(uint64_t)total_network_distance/100/1000. <<
|
||||||
|
" km";
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned CheckForEmanatingIsOnlyTurn(const NodeID u, const NodeID v) const {
|
unsigned CheckForEmanatingIsOnlyTurn(const NodeID u, const NodeID v) const {
|
||||||
std::pair < NodeID, NodeID > restrictionSource = std::make_pair(u, v);
|
std::pair < NodeID, NodeID > restriction_source = std::make_pair(u, v);
|
||||||
RestrictionMap::const_iterator restrIter = _restrictionMap.find(restrictionSource);
|
RestrictionMap::const_iterator restriction_iterator = m_restriction_map.find(restriction_source);
|
||||||
if (restrIter != _restrictionMap.end()) {
|
if (restriction_iterator != m_restriction_map.end()) {
|
||||||
unsigned index = restrIter->second;
|
const unsigned index = restriction_iterator->second;
|
||||||
BOOST_FOREACH(RestrictionSource restrictionTarget, _restrictionBucketVector.at(index)) {
|
BOOST_FOREACH(
|
||||||
if(restrictionTarget.second) {
|
const RestrictionSource & restriction_target,
|
||||||
return restrictionTarget.first;
|
m_restriction_bucket_list.at(index)
|
||||||
|
) {
|
||||||
|
if(restriction_target.second) {
|
||||||
|
return restriction_target.first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return UINT_MAX;
|
return UINT_MAX;
|
||||||
}
|
}
|
||||||
bool CheckIfTurnIsRestricted(const NodeID u, const NodeID v, const NodeID w) const {
|
|
||||||
|
bool CheckIfTurnIsRestricted(
|
||||||
|
const NodeID u,
|
||||||
|
const NodeID v,
|
||||||
|
const NodeID w
|
||||||
|
) const {
|
||||||
//only add an edge if turn is not a U-turn except it is the end of dead-end street.
|
//only add an edge if turn is not a U-turn except it is the end of dead-end street.
|
||||||
std::pair < NodeID, NodeID > restrictionSource = std::make_pair(u, v);
|
std::pair < NodeID, NodeID > restriction_source = std::make_pair(u, v);
|
||||||
RestrictionMap::const_iterator restrIter = _restrictionMap.find(restrictionSource);
|
RestrictionMap::const_iterator restriction_iterator = m_restriction_map.find(restriction_source);
|
||||||
if (restrIter != _restrictionMap.end()) {
|
if (restriction_iterator != m_restriction_map.end()) {
|
||||||
unsigned index = restrIter->second;
|
const unsigned index = restriction_iterator->second;
|
||||||
BOOST_FOREACH(RestrictionTarget restrictionTarget, _restrictionBucketVector.at(index)) {
|
BOOST_FOREACH(
|
||||||
if(w == restrictionTarget.first)
|
const restriction_target & restriction_target,
|
||||||
|
m_restriction_bucket_list.at(index)
|
||||||
|
) {
|
||||||
|
if(w == restriction_target.first) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeleteFileIfExists(const std::string file_name) const {
|
void DeleteFileIfExists(const std::string & file_name) const {
|
||||||
if (boost::filesystem::exists(file_name) ) {
|
if (boost::filesystem::exists(file_name) ) {
|
||||||
boost::filesystem::remove(file_name);
|
boost::filesystem::remove(file_name);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,11 @@ cmake_minimum_required(VERSION 2.6)
|
|||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
project(OSRM)
|
project(OSRM)
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
|
set(HUGO "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||||
|
include(GetGitRevisionDescription)
|
||||||
|
git_describe(GIT_DESCRIPTION)
|
||||||
|
|
||||||
TRY_RUN(SHARED_LIBRARY_PATH_TYPE SHARED_LIBRARY_PATH_INFO_COMPILED ${PROJECT_BINARY_DIR}/CMakeTmp ${PROJECT_SOURCE_DIR}/cmake/size.cpp OUTPUT_VARIABLE IS_64_SYSTEM)
|
TRY_RUN(SHARED_LIBRARY_PATH_TYPE SHARED_LIBRARY_PATH_INFO_COMPILED ${PROJECT_BINARY_DIR}/CMakeTmp ${PROJECT_SOURCE_DIR}/cmake/size.cpp OUTPUT_VARIABLE IS_64_SYSTEM)
|
||||||
if(IS_64_SYSTEM)
|
if(IS_64_SYSTEM)
|
||||||
@ -15,8 +20,8 @@ endif(IS_64_SYSTEM)
|
|||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/UUID.cpp UUID.cpp.alwaysbuild
|
add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/UUID.cpp UUID.cpp.alwaysbuild
|
||||||
COMMAND ${CMAKE_COMMAND} -P
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
|
||||||
${CMAKE_SOURCE_DIR}/cmake/UUID-Config.cmake
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UUID-Config.cmake
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${CMAKE_SOURCE_DIR}/Util/UUID.cpp.in
|
${CMAKE_SOURCE_DIR}/Util/UUID.cpp.in
|
||||||
${CMAKE_SOURCE_DIR}/cmake/UUID-Config.cmake
|
${CMAKE_SOURCE_DIR}/cmake/UUID-Config.cmake
|
||||||
@ -25,17 +30,18 @@ add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/UUID.cpp UUID.cpp.alwaysbuild
|
|||||||
|
|
||||||
add_custom_target(UUIDConfigure DEPENDS ${CMAKE_SOURCE_DIR}/Util/UUID.cpp )
|
add_custom_target(UUIDConfigure DEPENDS ${CMAKE_SOURCE_DIR}/Util/UUID.cpp )
|
||||||
|
|
||||||
set(BOOST_COMPONENTS filesystem regex system thread)
|
set(BOOST_COMPONENTS filesystem program_options regex system thread)
|
||||||
|
|
||||||
|
configure_file(Util/GitDescription.cpp.in ${CMAKE_SOURCE_DIR}/Util/GitDescription.cpp)
|
||||||
file(GLOB ExtractorGlob Extractor/*.cpp)
|
file(GLOB ExtractorGlob Extractor/*.cpp)
|
||||||
set(ExtractorSources extractor.cpp ${ExtractorGlob})
|
set(ExtractorSources extractor.cpp ${ExtractorGlob} Util/GitDescription.cpp)
|
||||||
add_executable(osrm-extract ${ExtractorSources} )
|
add_executable(osrm-extract ${ExtractorSources} )
|
||||||
|
|
||||||
file(GLOB PrepareGlob Contractor/*.cpp)
|
file(GLOB PrepareGlob Contractor/*.cpp)
|
||||||
set(PrepareSources createHierarchy.cpp ${PrepareGlob})
|
set(PrepareSources createHierarchy.cpp ${PrepareGlob} Util/GitDescription.cpp)
|
||||||
add_executable(osrm-prepare ${PrepareSources} )
|
add_executable(osrm-prepare ${PrepareSources} )
|
||||||
|
|
||||||
add_executable(osrm-routed routed.cpp )
|
add_executable(osrm-routed routed.cpp Util/GitDescription.cpp)
|
||||||
set_target_properties(osrm-routed PROPERTIES COMPILE_FLAGS -DROUTED)
|
set_target_properties(osrm-routed PROPERTIES COMPILE_FLAGS -DROUTED)
|
||||||
|
|
||||||
file(GLOB DescriptorGlob Descriptors/*.cpp)
|
file(GLOB DescriptorGlob Descriptors/*.cpp)
|
||||||
@ -155,6 +161,8 @@ if(WITH_TOOLS)
|
|||||||
osrm-components ${GDAL_LIBRARIES} ${Boost_LIBRARIES} UUID
|
osrm-components ${GDAL_LIBRARIES} ${Boost_LIBRARIES} UUID
|
||||||
)
|
)
|
||||||
endif(GDAL_FOUND)
|
endif(GDAL_FOUND)
|
||||||
add_executable ( osrm-cli Tools/simpleclient.cpp )
|
add_executable ( osrm-cli Tools/simpleclient.cpp Util/GitDescription.cpp)
|
||||||
target_link_libraries( osrm-cli ${Boost_LIBRARIES} OSRM UUID )
|
target_link_libraries( osrm-cli ${Boost_LIBRARIES} OSRM UUID )
|
||||||
|
add_executable ( osrm-io-benchmark Tools/io-benchmark.cpp )
|
||||||
|
target_link_libraries( osrm-io-benchmark ${Boost_LIBRARIES} )
|
||||||
endif(WITH_TOOLS)
|
endif(WITH_TOOLS)
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONTRACTOR_H_INCLUDED
|
#ifndef CONTRACTOR_H_INCLUDED
|
||||||
@ -38,7 +45,6 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
#include <cfloat>
|
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -732,7 +738,7 @@ private:
|
|||||||
if ( priority > targetPriority )
|
if ( priority > targetPriority )
|
||||||
return false;
|
return false;
|
||||||
//tie breaking
|
//tie breaking
|
||||||
if ( fabs(priority - targetPriority) < FLT_EPSILON && bias(node, target) ) {
|
if ( fabs(priority - targetPriority) < std::numeric_limits<double>::epsilon() && bias(node, target) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
neighbours.push_back( target );
|
neighbours.push_back( target );
|
||||||
@ -754,7 +760,7 @@ private:
|
|||||||
if ( priority > targetPriority)
|
if ( priority > targetPriority)
|
||||||
return false;
|
return false;
|
||||||
//tie breaking
|
//tie breaking
|
||||||
if ( fabs(priority - targetPriority) < FLT_EPSILON && bias(node, target) ) {
|
if ( fabs(priority - targetPriority) < std::numeric_limits<double>::epsilon() && bias(node, target) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "EdgeBasedGraphFactory.h"
|
#include "EdgeBasedGraphFactory.h"
|
||||||
@ -40,7 +47,7 @@ EdgeBasedGraphFactory::EdgeBasedGraphFactory(
|
|||||||
if(restriction_iter == m_restriction_map.end()) {
|
if(restriction_iter == m_restriction_map.end()) {
|
||||||
index = m_restriction_bucket_list.size();
|
index = m_restriction_bucket_list.size();
|
||||||
m_restriction_bucket_list.resize(index+1);
|
m_restriction_bucket_list.resize(index+1);
|
||||||
m_restriction_map[restriction_source] = index;
|
m_restriction_map.emplace(restriction_source, index);
|
||||||
} else {
|
} else {
|
||||||
index = restriction_iter->second;
|
index = restriction_iter->second;
|
||||||
//Map already contains an is_only_*-restriction
|
//Map already contains an is_only_*-restriction
|
||||||
@ -292,6 +299,8 @@ void EdgeBasedGraphFactory::Run(
|
|||||||
}
|
}
|
||||||
SimpleLogger().Write() <<
|
SimpleLogger().Write() <<
|
||||||
"identified: " << component_size_list.size() << " many components";
|
"identified: " << component_size_list.size() << " many components";
|
||||||
|
SimpleLogger().Write() <<
|
||||||
|
"generating edge-expanded nodes";
|
||||||
|
|
||||||
p.reinit(m_node_based_graph->GetNumberOfNodes());
|
p.reinit(m_node_based_graph->GetNumberOfNodes());
|
||||||
//loop over all edges and generate new set of nodes.
|
//loop over all edges and generate new set of nodes.
|
||||||
@ -301,6 +310,7 @@ void EdgeBasedGraphFactory::Run(
|
|||||||
u < number_of_nodes;
|
u < number_of_nodes;
|
||||||
++u
|
++u
|
||||||
) {
|
) {
|
||||||
|
p.printIncrement();
|
||||||
for(
|
for(
|
||||||
EdgeIterator e1 = m_node_based_graph->BeginEdges(u),
|
EdgeIterator e1 = m_node_based_graph->BeginEdges(u),
|
||||||
last_edge = m_node_based_graph->EndEdges(u);
|
last_edge = m_node_based_graph->EndEdges(u);
|
||||||
@ -325,6 +335,12 @@ void EdgeBasedGraphFactory::Run(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SimpleLogger().Write()
|
||||||
|
<< "Generated " << m_edge_based_node_list.size() << " nodes in " <<
|
||||||
|
"edge-expanded graph";
|
||||||
|
SimpleLogger().Write() <<
|
||||||
|
"generating edge-expanded edges";
|
||||||
|
|
||||||
std::vector<NodeID>().swap(component_size_list);
|
std::vector<NodeID>().swap(component_size_list);
|
||||||
BOOST_ASSERT_MSG(
|
BOOST_ASSERT_MSG(
|
||||||
0 == component_size_list.capacity(),
|
0 == component_size_list.capacity(),
|
||||||
@ -341,6 +357,7 @@ void EdgeBasedGraphFactory::Run(
|
|||||||
//Loop over all turns and generate new set of edges.
|
//Loop over all turns and generate new set of edges.
|
||||||
//Three nested loop look super-linear, but we are dealing with a (kind of)
|
//Three nested loop look super-linear, but we are dealing with a (kind of)
|
||||||
//linear number of turns only.
|
//linear number of turns only.
|
||||||
|
p.reinit(m_node_based_graph->GetNumberOfNodes());
|
||||||
for(
|
for(
|
||||||
NodeIterator u = 0,
|
NodeIterator u = 0,
|
||||||
last_node = m_node_based_graph->GetNumberOfNodes();
|
last_node = m_node_based_graph->GetNumberOfNodes();
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// This class constructs the edge-expanded routing graph
|
// This class constructs the edge-expanded routing graph
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "TemporaryStorage.h"
|
#include "TemporaryStorage.h"
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TEMPORARYSTORAGE_H_
|
#ifndef TEMPORARYSTORAGE_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BINARYHEAP_H_INCLUDED
|
#ifndef BINARYHEAP_H_INCLUDED
|
||||||
|
@ -1,25 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONCURRENTQUEUE_H_INCLUDED
|
#ifndef CONCURRENTQUEUE_H_
|
||||||
#define CONCURRENTQUEUE_H_INCLUDED
|
#define CONCURRENTQUEUE_H_
|
||||||
|
|
||||||
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/circular_buffer.hpp>
|
#include <boost/circular_buffer.hpp>
|
||||||
@ -27,57 +36,64 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#include <boost/thread/thread.hpp>
|
#include <boost/thread/thread.hpp>
|
||||||
|
|
||||||
#include "../typedefs.h"
|
|
||||||
|
|
||||||
template<typename Data>
|
template<typename Data>
|
||||||
class ConcurrentQueue {
|
class ConcurrentQueue {
|
||||||
|
|
||||||
typedef typename boost::circular_buffer<Data>::size_type size_t;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ConcurrentQueue(const size_t max_size) : internal_queue(max_size) { }
|
ConcurrentQueue(const size_t max_size) : m_internal_queue(max_size) { }
|
||||||
|
|
||||||
inline void push(Data const& data) {
|
inline void push(const Data & data) {
|
||||||
boost::mutex::scoped_lock lock(m_mutex);
|
boost::mutex::scoped_lock lock(m_mutex);
|
||||||
m_not_full.wait(lock, boost::bind(&ConcurrentQueue<Data>::is_not_full, this));
|
m_not_full.wait(
|
||||||
internal_queue.push_back(data);
|
lock,
|
||||||
|
boost::bind(&ConcurrentQueue<Data>::is_not_full, this)
|
||||||
|
);
|
||||||
|
m_internal_queue.push_back(data);
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
m_not_empty.notify_one();
|
m_not_empty.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool empty() const {
|
inline bool empty() const {
|
||||||
return internal_queue.empty();
|
return m_internal_queue.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void wait_and_pop(Data & popped_value) {
|
inline void wait_and_pop(Data & popped_value) {
|
||||||
boost::mutex::scoped_lock lock(m_mutex);
|
boost::mutex::scoped_lock lock(m_mutex);
|
||||||
m_not_empty.wait(lock, boost::bind(&ConcurrentQueue<Data>::is_not_empty, this));
|
m_not_empty.wait(
|
||||||
popped_value=internal_queue.front();
|
lock,
|
||||||
internal_queue.pop_front();
|
boost::bind(&ConcurrentQueue<Data>::is_not_empty, this)
|
||||||
|
);
|
||||||
|
popped_value = m_internal_queue.front();
|
||||||
|
m_internal_queue.pop_front();
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
m_not_full.notify_one();
|
m_not_full.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool try_pop(Data& popped_value) {
|
inline bool try_pop(Data& popped_value) {
|
||||||
boost::mutex::scoped_lock lock(m_mutex);
|
boost::mutex::scoped_lock lock(m_mutex);
|
||||||
if(internal_queue.empty()) {
|
if(m_internal_queue.empty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
popped_value=internal_queue.front();
|
popped_value=m_internal_queue.front();
|
||||||
internal_queue.pop_front();
|
m_internal_queue.pop_front();
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
m_not_full.notify_one();
|
m_not_full.notify_one();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
boost::circular_buffer<Data> internal_queue;
|
inline bool is_not_empty() const {
|
||||||
|
return !m_internal_queue.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool is_not_full() const {
|
||||||
|
return m_internal_queue.size() < m_internal_queue.capacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::circular_buffer<Data> m_internal_queue;
|
||||||
boost::mutex m_mutex;
|
boost::mutex m_mutex;
|
||||||
boost::condition m_not_empty;
|
boost::condition m_not_empty;
|
||||||
boost::condition m_not_full;
|
boost::condition m_not_full;
|
||||||
|
|
||||||
inline bool is_not_empty() const { return internal_queue.size() > 0; }
|
|
||||||
inline bool is_not_full() const { return internal_queue.size() < internal_queue.capacity(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //#ifndef CONCURRENTQUEUE_H_INCLUDED
|
#endif /* CONCURRENTQUEUE_H_ */
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FIXED_POINT_COORDINATE_H_
|
#ifndef FIXED_POINT_COORDINATE_H_
|
||||||
@ -118,8 +125,8 @@ inline double ApproximateEuclideanDistance(const FixedPointCoordinate &c1, const
|
|||||||
|
|
||||||
static inline void convertInternalLatLonToString(const int value, std::string & output) {
|
static inline void convertInternalLatLonToString(const int value, std::string & output) {
|
||||||
char buffer[100];
|
char buffer[100];
|
||||||
buffer[10] = 0; // Nullterminierung
|
buffer[11] = 0; // zero termination
|
||||||
char* string = printInt< 10, 6 >( buffer, value );
|
char* string = printInt< 11, 6 >( buffer, value );
|
||||||
output = string;
|
output = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,27 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DEALLOCATINGVECTOR_H_
|
#ifndef DEALLOCATINGVECTOR_H_
|
||||||
#define DEALLOCATINGVECTOR_H_
|
#define DEALLOCATINGVECTOR_H_
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <cstring>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#if __cplusplus > 199711L
|
#if __cplusplus > 199711L
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DYNAMICGRAPH_H_INCLUDED
|
#ifndef DYNAMICGRAPH_H_INCLUDED
|
||||||
|
@ -1,24 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
along with this program; if not, write to the Free Software
|
of conditions and the following disclaimer.
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
Created on: 18.11.2010
|
|
||||||
Author: dennis
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HASHTABLE_H_
|
#ifndef HASHTABLE_H_
|
||||||
@ -36,6 +40,11 @@ public:
|
|||||||
|
|
||||||
HashTable(const unsigned size) : super(size) { }
|
HashTable(const unsigned size) : super(size) { }
|
||||||
|
|
||||||
|
HashTable &operator=(const HashTable &other) {
|
||||||
|
super::operator = (other);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
inline void Add(const keyT& key, const valueT& value){
|
inline void Add(const keyT& key, const valueT& value){
|
||||||
super::insert(std::make_pair(key, value));
|
super::insert(std::make_pair(key, value));
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HILBERTVALUE_H_
|
#ifndef HILBERTVALUE_H_
|
||||||
|
@ -1,33 +1,41 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EDGE_H
|
#ifndef IMPORT_EDGE_H
|
||||||
#define EDGE_H
|
#define IMPORT_EDGE_H
|
||||||
|
|
||||||
|
|
||||||
#include "../Util/OSRMException.h"
|
#include "../Util/OSRMException.h"
|
||||||
#include <cassert>
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
class NodeBasedEdge {
|
class NodeBasedEdge {
|
||||||
public:
|
|
||||||
|
|
||||||
|
public:
|
||||||
bool operator< (const NodeBasedEdge& e) const {
|
bool operator< (const NodeBasedEdge& e) const {
|
||||||
if (source() == e.source()) {
|
if (source() == e.source()) {
|
||||||
if (target() == e.target()) {
|
if (target() == e.target()) {
|
||||||
@ -58,9 +66,9 @@ public:
|
|||||||
_target(t),
|
_target(t),
|
||||||
_name(n),
|
_name(n),
|
||||||
_weight(w),
|
_weight(w),
|
||||||
|
_type(ty),
|
||||||
forward(f),
|
forward(f),
|
||||||
backward(b),
|
backward(b),
|
||||||
_type(ty),
|
|
||||||
_roundabout(ra),
|
_roundabout(ra),
|
||||||
_ignoreInGrid(ig),
|
_ignoreInGrid(ig),
|
||||||
_accessRestricted(ar),
|
_accessRestricted(ar),
|
||||||
@ -75,8 +83,9 @@ public:
|
|||||||
NodeID source() const {return _source; }
|
NodeID source() const {return _source; }
|
||||||
NodeID name() const { return _name; }
|
NodeID name() const { return _name; }
|
||||||
EdgeWeight weight() const {return _weight; }
|
EdgeWeight weight() const {return _weight; }
|
||||||
|
short type() const {
|
||||||
short type() const { assert(_type >= 0); return _type; }
|
BOOST_ASSERT_MSG(_type >= 0, "type of ImportEdge invalid");
|
||||||
|
return _type; }
|
||||||
bool isBackward() const { return backward; }
|
bool isBackward() const { return backward; }
|
||||||
bool isForward() const { return forward; }
|
bool isForward() const { return forward; }
|
||||||
bool isLocatable() const { return _type != 14; }
|
bool isLocatable() const { return _type != 14; }
|
||||||
@ -85,28 +94,26 @@ public:
|
|||||||
bool isAccessRestricted() const { return _accessRestricted; }
|
bool isAccessRestricted() const { return _accessRestricted; }
|
||||||
bool isContraFlow() const { return _contraFlow; }
|
bool isContraFlow() const { return _contraFlow; }
|
||||||
|
|
||||||
|
//TODO: names need to be fixed.
|
||||||
NodeID _source;
|
NodeID _source;
|
||||||
NodeID _target;
|
NodeID _target;
|
||||||
NodeID _name;
|
NodeID _name;
|
||||||
EdgeWeight _weight;
|
EdgeWeight _weight;
|
||||||
bool forward;
|
|
||||||
bool backward;
|
|
||||||
short _type;
|
short _type;
|
||||||
bool _roundabout;
|
bool forward:1;
|
||||||
bool _ignoreInGrid;
|
bool backward:1;
|
||||||
bool _accessRestricted;
|
bool _roundabout:1;
|
||||||
bool _contraFlow;
|
bool _ignoreInGrid:1;
|
||||||
|
bool _accessRestricted:1;
|
||||||
|
bool _contraFlow:1;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Default constructor. target and weight are set to 0.*/
|
NodeBasedEdge() { }
|
||||||
NodeBasedEdge() :
|
|
||||||
_source(0), _target(0), _name(0), _weight(0), forward(0), backward(0), _type(0), _roundabout(false), _ignoreInGrid(false), _accessRestricted(false), _contraFlow(false) { assert(false); } //shall not be used.
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class EdgeBasedEdge {
|
class EdgeBasedEdge {
|
||||||
public:
|
|
||||||
|
|
||||||
|
public:
|
||||||
bool operator< (const EdgeBasedEdge& e) const {
|
bool operator< (const EdgeBasedEdge& e) const {
|
||||||
if (source() == e.source()) {
|
if (source() == e.source()) {
|
||||||
if (target() == e.target()) {
|
if (target() == e.target()) {
|
||||||
@ -141,7 +148,14 @@ public:
|
|||||||
m_backward(false)
|
m_backward(false)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
explicit EdgeBasedEdge(const NodeID s, const NodeID t, const NodeID v, const EdgeWeight w, const bool f, const bool b) :
|
explicit EdgeBasedEdge(
|
||||||
|
const NodeID s,
|
||||||
|
const NodeID t,
|
||||||
|
const NodeID v,
|
||||||
|
const EdgeWeight w,
|
||||||
|
const bool f,
|
||||||
|
const bool b
|
||||||
|
) :
|
||||||
m_source(s),
|
m_source(s),
|
||||||
m_target(t),
|
m_target(t),
|
||||||
m_edgeID(v),
|
m_edgeID(v),
|
||||||
@ -156,6 +170,7 @@ public:
|
|||||||
NodeID id() const { return m_edgeID; }
|
NodeID id() const { return m_edgeID; }
|
||||||
bool isBackward() const { return m_backward; }
|
bool isBackward() const { return m_backward; }
|
||||||
bool isForward() const { return m_forward; }
|
bool isForward() const { return m_forward; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NodeID m_source;
|
NodeID m_source;
|
||||||
NodeID m_target;
|
NodeID m_target;
|
||||||
@ -167,4 +182,4 @@ private:
|
|||||||
|
|
||||||
typedef NodeBasedEdge ImportEdge;
|
typedef NodeBasedEdge ImportEdge;
|
||||||
|
|
||||||
#endif // EDGE_H
|
#endif /* IMPORT_EDGE_H */
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IMPORTNODE_H_
|
#ifndef IMPORTNODE_H_
|
||||||
|
@ -1,23 +1,31 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef INPUTREADERFACTORY_H
|
#ifndef INPUTREADERFACTORY_H
|
||||||
#define INPUTREADERFACTORY_H
|
#define INPUTREADERFACTORY_H
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LRUCACHE_H
|
#ifndef LRUCACHE_H
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MERCATORUTIL_H_
|
#ifndef MERCATORUTIL_H_
|
||||||
|
@ -1,23 +1,31 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef NODEINFORMATIONHELPDESK_H_
|
#ifndef NODEINFORMATIONHELPDESK_H_
|
||||||
#define NODEINFORMATIONHELPDESK_H_
|
#define NODEINFORMATIONHELPDESK_H_
|
||||||
|
|
||||||
@ -40,20 +48,23 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
typedef EdgeBasedGraphFactory::EdgeBasedNode RTreeLeaf;
|
typedef EdgeBasedGraphFactory::EdgeBasedNode RTreeLeaf;
|
||||||
|
|
||||||
class NodeInformationHelpDesk : boost::noncopyable {
|
class NodeInformationHelpDesk : boost::noncopyable {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NodeInformationHelpDesk(
|
NodeInformationHelpDesk(
|
||||||
const std::string & ramIndexInput,
|
const std::string & ram_index_filename,
|
||||||
const std::string & fileIndexInput,
|
const std::string & mem_index_filename,
|
||||||
const std::string & nodes_filename,
|
const std::string & nodes_filename,
|
||||||
const std::string & edges_filename,
|
const std::string & edges_filename,
|
||||||
const unsigned number_of_nodes,
|
const unsigned m_number_of_nodes,
|
||||||
const unsigned check_sum
|
const unsigned m_check_sum
|
||||||
) : number_of_nodes(number_of_nodes), check_sum(check_sum)
|
) :
|
||||||
|
m_number_of_nodes(m_number_of_nodes),
|
||||||
|
m_check_sum(m_check_sum)
|
||||||
{
|
{
|
||||||
if ( ramIndexInput.empty() ) {
|
if ( ram_index_filename.empty() ) {
|
||||||
throw OSRMException("no ram index file name in server ini");
|
throw OSRMException("no ram index file name in server ini");
|
||||||
}
|
}
|
||||||
if ( fileIndexInput.empty() ) {
|
if ( mem_index_filename.empty() ) {
|
||||||
throw OSRMException("no mem index file name in server ini");
|
throw OSRMException("no mem index file name in server ini");
|
||||||
}
|
}
|
||||||
if ( nodes_filename.empty() ) {
|
if ( nodes_filename.empty() ) {
|
||||||
@ -63,61 +74,49 @@ public:
|
|||||||
throw OSRMException("no edges file name in server ini");
|
throw OSRMException("no edges file name in server ini");
|
||||||
}
|
}
|
||||||
|
|
||||||
read_only_rtree = new StaticRTree<RTreeLeaf>(
|
m_ro_rtree_ptr = new StaticRTree<RTreeLeaf>(
|
||||||
ramIndexInput,
|
ram_index_filename,
|
||||||
fileIndexInput
|
mem_index_filename
|
||||||
);
|
);
|
||||||
BOOST_ASSERT_MSG(
|
BOOST_ASSERT_MSG(
|
||||||
0 == coordinateVector.size(),
|
0 == m_coordinate_list.size(),
|
||||||
"Coordinate vector not empty"
|
"Coordinate vector not empty"
|
||||||
);
|
);
|
||||||
|
|
||||||
LoadNodesAndEdges(nodes_filename, edges_filename);
|
LoadNodesAndEdges(nodes_filename, edges_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Todo: Shared memory mechanism
|
|
||||||
~NodeInformationHelpDesk() {
|
~NodeInformationHelpDesk() {
|
||||||
delete read_only_rtree;
|
delete m_ro_rtree_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int getLatitudeOfNode(const unsigned id) const {
|
inline FixedPointCoordinate GetCoordinateOfNode(const unsigned id) const {
|
||||||
const NodeID node = origEdgeData_viaNode.at(id);
|
const NodeID node = m_via_node_list.at(id);
|
||||||
return coordinateVector.at(node).lat;
|
return m_coordinate_list.at(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int getLongitudeOfNode(const unsigned id) const {
|
inline unsigned GetNameIndexFromEdgeID(const unsigned id) const {
|
||||||
const NodeID node = origEdgeData_viaNode.at(id);
|
return m_name_ID_list.at(id);
|
||||||
return coordinateVector.at(node).lon;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned getNameIndexFromEdgeID(const unsigned id) const {
|
inline TurnInstruction GetTurnInstructionForEdgeID(const unsigned id) const {
|
||||||
return origEdgeData_nameID.at(id);
|
return m_turn_instruction_list.at(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline TurnInstruction getTurnInstructionFromEdgeID(const unsigned id) const {
|
inline NodeID GetNumberOfNodes() const {
|
||||||
return origEdgeData_turnInstruction.at(id);
|
return m_number_of_nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline NodeID getNumberOfNodes() const {
|
inline bool LocateClosestEndPointForCoordinate(
|
||||||
return number_of_nodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline NodeID getNumberOfNodes2() const {
|
|
||||||
return coordinateVector.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool FindNearestNodeCoordForLatLon(
|
|
||||||
const FixedPointCoordinate& input_coordinate,
|
const FixedPointCoordinate& input_coordinate,
|
||||||
FixedPointCoordinate& result,
|
FixedPointCoordinate& result,
|
||||||
const unsigned zoom_level = 18
|
const unsigned zoom_level = 18
|
||||||
) const {
|
) const {
|
||||||
PhantomNode resulting_phantom_node;
|
bool found_node = m_ro_rtree_ptr->LocateClosestEndPointForCoordinate(
|
||||||
bool foundNode = FindPhantomNodeForCoordinate(
|
|
||||||
input_coordinate,
|
input_coordinate,
|
||||||
resulting_phantom_node, zoom_level
|
result, zoom_level
|
||||||
);
|
);
|
||||||
result = resulting_phantom_node.location;
|
return found_node;
|
||||||
return foundNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool FindPhantomNodeForCoordinate(
|
inline bool FindPhantomNodeForCoordinate(
|
||||||
@ -125,7 +124,7 @@ public:
|
|||||||
PhantomNode & resulting_phantom_node,
|
PhantomNode & resulting_phantom_node,
|
||||||
const unsigned zoom_level
|
const unsigned zoom_level
|
||||||
) const {
|
) const {
|
||||||
return read_only_rtree->FindPhantomNodeForCoordinate(
|
return m_ro_rtree_ptr->FindPhantomNodeForCoordinate(
|
||||||
input_coordinate,
|
input_coordinate,
|
||||||
resulting_phantom_node,
|
resulting_phantom_node,
|
||||||
zoom_level
|
zoom_level
|
||||||
@ -133,7 +132,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned GetCheckSum() const {
|
inline unsigned GetCheckSum() const {
|
||||||
return check_sum;
|
return m_check_sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -157,48 +156,63 @@ private:
|
|||||||
throw OSRMException("edges file is empty");
|
throw OSRMException("edges file is empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::filesystem::ifstream nodes_input_stream(nodes_file, std::ios::binary);
|
boost::filesystem::ifstream nodes_input_stream(
|
||||||
boost::filesystem::ifstream edges_input_stream(edges_file, std::ios::binary);
|
nodes_file,
|
||||||
|
std::ios::binary
|
||||||
|
);
|
||||||
|
|
||||||
SimpleLogger().Write(logDEBUG) << "Loading node data";
|
boost::filesystem::ifstream edges_input_stream(
|
||||||
NodeInfo b;
|
edges_file, std::ios::binary
|
||||||
|
);
|
||||||
|
|
||||||
|
SimpleLogger().Write(logDEBUG)
|
||||||
|
<< "Loading node data";
|
||||||
|
NodeInfo current_node;
|
||||||
while(!nodes_input_stream.eof()) {
|
while(!nodes_input_stream.eof()) {
|
||||||
nodes_input_stream.read((char *)&b, sizeof(NodeInfo));
|
nodes_input_stream.read((char *)¤t_node, sizeof(NodeInfo));
|
||||||
coordinateVector.push_back(FixedPointCoordinate(b.lat, b.lon));
|
m_coordinate_list.push_back(
|
||||||
|
FixedPointCoordinate(
|
||||||
|
current_node.lat,
|
||||||
|
current_node.lon
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
std::vector<FixedPointCoordinate>(coordinateVector).swap(coordinateVector);
|
std::vector<FixedPointCoordinate>(m_coordinate_list).swap(m_coordinate_list);
|
||||||
nodes_input_stream.close();
|
nodes_input_stream.close();
|
||||||
|
|
||||||
SimpleLogger().Write(logDEBUG) << "Loading edge data";
|
SimpleLogger().Write(logDEBUG)
|
||||||
unsigned numberOfOrigEdges(0);
|
<< "Loading edge data";
|
||||||
edges_input_stream.read((char*)&numberOfOrigEdges, sizeof(unsigned));
|
unsigned number_of_edges = 0;
|
||||||
origEdgeData_viaNode.resize(numberOfOrigEdges);
|
edges_input_stream.read((char*)&number_of_edges, sizeof(unsigned));
|
||||||
origEdgeData_nameID.resize(numberOfOrigEdges);
|
m_via_node_list.resize(number_of_edges);
|
||||||
origEdgeData_turnInstruction.resize(numberOfOrigEdges);
|
m_name_ID_list.resize(number_of_edges);
|
||||||
|
m_turn_instruction_list.resize(number_of_edges);
|
||||||
|
|
||||||
OriginalEdgeData deserialized_originalEdgeData;
|
OriginalEdgeData current_edge_data;
|
||||||
for(unsigned i = 0; i < numberOfOrigEdges; ++i) {
|
for(unsigned i = 0; i < number_of_edges; ++i) {
|
||||||
edges_input_stream.read(
|
edges_input_stream.read(
|
||||||
(char*)&(deserialized_originalEdgeData),
|
(char*)&(current_edge_data),
|
||||||
sizeof(OriginalEdgeData)
|
sizeof(OriginalEdgeData)
|
||||||
);
|
);
|
||||||
origEdgeData_viaNode[i] = deserialized_originalEdgeData.viaNode;
|
m_via_node_list[i] = current_edge_data.viaNode;
|
||||||
origEdgeData_nameID[i] = deserialized_originalEdgeData.nameID;
|
m_name_ID_list[i] = current_edge_data.nameID;
|
||||||
origEdgeData_turnInstruction[i] = deserialized_originalEdgeData.turnInstruction;
|
m_turn_instruction_list[i] = current_edge_data.turnInstruction;
|
||||||
}
|
}
|
||||||
edges_input_stream.close();
|
edges_input_stream.close();
|
||||||
SimpleLogger().Write(logDEBUG) << "Loaded " << numberOfOrigEdges << " orig edges";
|
SimpleLogger().Write(logDEBUG)
|
||||||
SimpleLogger().Write(logDEBUG) << "Opening NN indices";
|
<< "Loaded " << number_of_edges << " orig edges";
|
||||||
|
SimpleLogger().Write(logDEBUG)
|
||||||
|
<< "Opening NN indices";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<FixedPointCoordinate> coordinateVector;
|
std::vector<FixedPointCoordinate> m_coordinate_list;
|
||||||
std::vector<NodeID> origEdgeData_viaNode;
|
std::vector<NodeID> m_via_node_list;
|
||||||
std::vector<unsigned> origEdgeData_nameID;
|
std::vector<unsigned> m_name_ID_list;
|
||||||
std::vector<TurnInstruction> origEdgeData_turnInstruction;
|
std::vector<TurnInstruction> m_turn_instruction_list;
|
||||||
|
|
||||||
StaticRTree<EdgeBasedGraphFactory::EdgeBasedNode> * read_only_rtree;
|
StaticRTree<EdgeBasedGraphFactory::EdgeBasedNode> * m_ro_rtree_ptr;
|
||||||
const unsigned number_of_nodes;
|
const unsigned m_number_of_nodes;
|
||||||
const unsigned check_sum;
|
const unsigned m_check_sum;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NODEINFORMATIONHELPDESK_H_*/
|
#endif /*NODEINFORMATIONHELPDESK_H_*/
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PERCENT_H
|
#ifndef PERCENT_H
|
||||||
@ -24,8 +31,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "../Util/OpenMPWrapper.h"
|
#include "../Util/OpenMPWrapper.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
class Percent
|
class Percent {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
@ -56,8 +62,7 @@ public:
|
|||||||
std::cout << " 100%" << std::endl;
|
std::cout << " 100%" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void printIncrement()
|
void printIncrement() {
|
||||||
{
|
|
||||||
#pragma omp atomic
|
#pragma omp atomic
|
||||||
++_current_value;
|
++_current_value;
|
||||||
printStatus(_current_value);
|
printStatus(_current_value);
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PHANTOMNODES_H_
|
#ifndef PHANTOMNODES_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef QUERYEDGE_H_
|
#ifndef QUERYEDGE_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _NODE_COORDS_H
|
#ifndef _NODE_COORDS_H
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef RAWROUTEDATA_H_
|
#ifndef RAWROUTEDATA_H_
|
||||||
|
@ -1,25 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef RESTRICTION_H_
|
#ifndef RESTRICTION_H_
|
||||||
#define RESTRICTION_H_
|
#define RESTRICTION_H_
|
||||||
|
|
||||||
|
@ -1,42 +1,45 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "SearchEngine.h"
|
#include "SearchEngine.h"
|
||||||
|
|
||||||
SearchEngine::SearchEngine(
|
SearchEngine::SearchEngine( QueryObjectsStorage * query_objects ) :
|
||||||
QueryGraph * g,
|
_queryData(query_objects),
|
||||||
NodeInformationHelpDesk * nh,
|
|
||||||
std::vector<std::string> & n
|
|
||||||
) :
|
|
||||||
_queryData(g, nh, n),
|
|
||||||
shortestPath(_queryData),
|
shortestPath(_queryData),
|
||||||
alternativePaths(_queryData)
|
alternativePaths(_queryData)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
SearchEngine::~SearchEngine() {}
|
SearchEngine::~SearchEngine() {}
|
||||||
|
|
||||||
void SearchEngine::GetCoordinatesForNodeID(
|
void SearchEngine::GetCoordinatesForNodeID(
|
||||||
NodeID id,
|
NodeID id,
|
||||||
FixedPointCoordinate& result
|
FixedPointCoordinate& result
|
||||||
) const {
|
) const {
|
||||||
result.lat = _queryData.nodeHelpDesk->getLatitudeOfNode(id);
|
result = _queryData.nodeHelpDesk->GetCoordinateOfNode(id);
|
||||||
result.lon = _queryData.nodeHelpDesk->getLongitudeOfNode(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SearchEngine::FindPhantomNodeForCoordinate(
|
void SearchEngine::FindPhantomNodeForCoordinate(
|
||||||
@ -57,25 +60,25 @@ NodeID SearchEngine::GetNameIDForOriginDestinationNodeID(
|
|||||||
if(s == t) {
|
if(s == t) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EdgeID e = _queryData.graph->FindEdge(s, t);
|
EdgeID e = _queryData.graph->FindEdge(s, t);
|
||||||
if(e == UINT_MAX) {
|
if(e == UINT_MAX) {
|
||||||
e = _queryData.graph->FindEdge( t, s );
|
e = _queryData.graph->FindEdge( t, s );
|
||||||
}
|
}
|
||||||
|
|
||||||
if(UINT_MAX == e) {
|
if(UINT_MAX == e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(e != UINT_MAX);
|
assert(e != UINT_MAX);
|
||||||
const QueryEdge::EdgeData ed = _queryData.graph->GetEdgeData(e);
|
const QueryEdge::EdgeData ed = _queryData.graph->GetEdgeData(e);
|
||||||
return ed.id;
|
return ed.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string SearchEngine::GetEscapedNameForNameID(const unsigned nameID) const {
|
std::string SearchEngine::GetEscapedNameForNameID(const unsigned nameID) const {
|
||||||
bool is_name_invalid = (nameID >= _queryData.names.size() || nameID == 0);
|
std::string result;
|
||||||
if (is_name_invalid) {
|
_queryData.query_objects->GetName(nameID, result);
|
||||||
return std::string("");
|
return HTMLEntitize(result);
|
||||||
}
|
|
||||||
|
|
||||||
return HTMLEntitize(_queryData.names.at(nameID));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchEngineHeapPtr SearchEngineData::forwardHeap;
|
SearchEngineHeapPtr SearchEngineData::forwardHeap;
|
||||||
@ -86,4 +89,3 @@ SearchEngineHeapPtr SearchEngineData::backwardHeap2;
|
|||||||
|
|
||||||
SearchEngineHeapPtr SearchEngineData::forwardHeap3;
|
SearchEngineHeapPtr SearchEngineData::forwardHeap3;
|
||||||
SearchEngineHeapPtr SearchEngineData::backwardHeap3;
|
SearchEngineHeapPtr SearchEngineData::backwardHeap3;
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SEARCHENGINE_H_
|
#ifndef SEARCHENGINE_H_
|
||||||
@ -28,6 +35,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "SearchEngineData.h"
|
#include "SearchEngineData.h"
|
||||||
#include "../RoutingAlgorithms/AlternativePathRouting.h"
|
#include "../RoutingAlgorithms/AlternativePathRouting.h"
|
||||||
#include "../RoutingAlgorithms/ShortestPathRouting.h"
|
#include "../RoutingAlgorithms/ShortestPathRouting.h"
|
||||||
|
#include "../Server/DataStructures/QueryObjectsStorage.h"
|
||||||
|
|
||||||
#include "../Util/StringUtil.h"
|
#include "../Util/StringUtil.h"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
@ -44,11 +52,7 @@ public:
|
|||||||
ShortestPathRouting<SearchEngineData> shortestPath;
|
ShortestPathRouting<SearchEngineData> shortestPath;
|
||||||
AlternativeRouting<SearchEngineData> alternativePaths;
|
AlternativeRouting<SearchEngineData> alternativePaths;
|
||||||
|
|
||||||
SearchEngine(
|
SearchEngine( QueryObjectsStorage * query_objects );
|
||||||
QueryGraph * g,
|
|
||||||
NodeInformationHelpDesk * nh,
|
|
||||||
std::vector<std::string> & n
|
|
||||||
);
|
|
||||||
~SearchEngine();
|
~SearchEngine();
|
||||||
|
|
||||||
void GetCoordinatesForNodeID(NodeID id, FixedPointCoordinate& result) const;
|
void GetCoordinatesForNodeID(NodeID id, FixedPointCoordinate& result) const;
|
||||||
|
@ -1,33 +1,40 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "SearchEngineData.h"
|
#include "SearchEngineData.h"
|
||||||
|
|
||||||
void SearchEngineData::InitializeOrClearFirstThreadLocalStorage() {
|
void SearchEngineData::InitializeOrClearFirstThreadLocalStorage() {
|
||||||
if(!forwardHeap.get()) {
|
if(!forwardHeap.get()) {
|
||||||
forwardHeap.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes()));
|
forwardHeap.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes()));
|
||||||
} else {
|
} else {
|
||||||
forwardHeap->Clear();
|
forwardHeap->Clear();
|
||||||
}
|
}
|
||||||
if(!backwardHeap.get()) {
|
if(!backwardHeap.get()) {
|
||||||
backwardHeap.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes()));
|
backwardHeap.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes()));
|
||||||
} else {
|
} else {
|
||||||
backwardHeap->Clear();
|
backwardHeap->Clear();
|
||||||
}
|
}
|
||||||
@ -35,12 +42,12 @@ void SearchEngineData::InitializeOrClearFirstThreadLocalStorage() {
|
|||||||
|
|
||||||
void SearchEngineData::InitializeOrClearSecondThreadLocalStorage() {
|
void SearchEngineData::InitializeOrClearSecondThreadLocalStorage() {
|
||||||
if(!forwardHeap2.get()) {
|
if(!forwardHeap2.get()) {
|
||||||
forwardHeap2.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes()));
|
forwardHeap2.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes()));
|
||||||
} else {
|
} else {
|
||||||
forwardHeap2->Clear();
|
forwardHeap2->Clear();
|
||||||
}
|
}
|
||||||
if(!backwardHeap2.get()) {
|
if(!backwardHeap2.get()) {
|
||||||
backwardHeap2.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes()));
|
backwardHeap2.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes()));
|
||||||
} else {
|
} else {
|
||||||
backwardHeap2->Clear();
|
backwardHeap2->Clear();
|
||||||
}
|
}
|
||||||
@ -48,12 +55,12 @@ void SearchEngineData::InitializeOrClearSecondThreadLocalStorage() {
|
|||||||
|
|
||||||
void SearchEngineData::InitializeOrClearThirdThreadLocalStorage() {
|
void SearchEngineData::InitializeOrClearThirdThreadLocalStorage() {
|
||||||
if(!forwardHeap3.get()) {
|
if(!forwardHeap3.get()) {
|
||||||
forwardHeap3.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes()));
|
forwardHeap3.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes()));
|
||||||
} else {
|
} else {
|
||||||
forwardHeap3->Clear();
|
forwardHeap3->Clear();
|
||||||
}
|
}
|
||||||
if(!backwardHeap3.get()) {
|
if(!backwardHeap3.get()) {
|
||||||
backwardHeap3.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes()));
|
backwardHeap3.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes()));
|
||||||
} else {
|
} else {
|
||||||
backwardHeap3->Clear();
|
backwardHeap3->Clear();
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BinaryHeap.h"
|
#include "BinaryHeap.h"
|
||||||
#include "QueryEdge.h"
|
#include "QueryEdge.h"
|
||||||
#include "NodeInformationHelpDesk.h"
|
|
||||||
#include "StaticGraph.h"
|
#include "StaticGraph.h"
|
||||||
|
#include "../Server/DataStructures/QueryObjectsStorage.h"
|
||||||
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
@ -41,10 +48,17 @@ typedef boost::thread_specific_ptr<QueryHeapType> SearchEngineHeapPtr;
|
|||||||
struct SearchEngineData {
|
struct SearchEngineData {
|
||||||
typedef QueryGraph Graph;
|
typedef QueryGraph Graph;
|
||||||
typedef QueryHeapType QueryHeap;
|
typedef QueryHeapType QueryHeap;
|
||||||
SearchEngineData(QueryGraph * g, NodeInformationHelpDesk * nh, std::vector<std::string> & n) :graph(g), nodeHelpDesk(nh), names(n) {}
|
SearchEngineData(QueryObjectsStorage * query_objects)
|
||||||
|
:
|
||||||
|
query_objects(query_objects),
|
||||||
|
graph(query_objects->graph),
|
||||||
|
nodeHelpDesk(query_objects->nodeHelpDesk)
|
||||||
|
{}
|
||||||
|
|
||||||
|
const QueryObjectsStorage * query_objects;
|
||||||
const QueryGraph * graph;
|
const QueryGraph * graph;
|
||||||
NodeInformationHelpDesk * nodeHelpDesk;
|
const NodeInformationHelpDesk * nodeHelpDesk;
|
||||||
std::vector<std::string> & names;
|
|
||||||
static SearchEngineHeapPtr forwardHeap;
|
static SearchEngineHeapPtr forwardHeap;
|
||||||
static SearchEngineHeapPtr backwardHeap;
|
static SearchEngineHeapPtr backwardHeap;
|
||||||
static SearchEngineHeapPtr forwardHeap2;
|
static SearchEngineHeapPtr forwardHeap2;
|
||||||
|
@ -1,26 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SEGMENTINFORMATION_H_
|
#ifndef SEGMENTINFORMATION_H_
|
||||||
#define SEGMENTINFORMATION_H_
|
#define SEGMENTINFORMATION_H_
|
||||||
|
|
||||||
|
#include "Coordinate.h"
|
||||||
#include "TurnInstructions.h"
|
#include "TurnInstructions.h"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SIMPLESTACK_H_
|
#ifndef SIMPLESTACK_H_
|
||||||
|
@ -1,26 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef STATICGRAPH_H_INCLUDED
|
#ifndef STATICGRAPH_H_INCLUDED
|
||||||
#define STATICGRAPH_H_INCLUDED
|
#define STATICGRAPH_H_INCLUDED
|
||||||
|
|
||||||
|
#include "../DataStructures/Percent.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
@ -1,25 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
along with this program; if not, write to the Free Software
|
of conditions and the following disclaimer.
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
KD Tree coded by Christian Vetter, Monav Project
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// KD Tree coded by Christian Vetter, Monav Project
|
||||||
|
|
||||||
#ifndef STATICKDTREE_H_INCLUDED
|
#ifndef STATICKDTREE_H_INCLUDED
|
||||||
#define STATICKDTREE_H_INCLUDED
|
#define STATICKDTREE_H_INCLUDED
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef STATICRTREE_H_
|
#ifndef STATICRTREE_H_
|
||||||
@ -42,11 +49,8 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
#include <cfloat>
|
|
||||||
#include <climits>
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <limits>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -129,7 +133,7 @@ private:
|
|||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
double min_dist = DBL_MAX;
|
double min_dist = std::numeric_limits<double>::max();
|
||||||
min_dist = std::min(
|
min_dist = std::min(
|
||||||
min_dist,
|
min_dist,
|
||||||
ApproximateDistance(
|
ApproximateDistance(
|
||||||
@ -170,7 +174,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline double GetMinMaxDist(const FixedPointCoordinate & location) const {
|
inline double GetMinMaxDist(const FixedPointCoordinate & location) const {
|
||||||
double min_max_dist = DBL_MAX;
|
double min_max_dist = std::numeric_limits<double>::max();
|
||||||
//Get minmax distance to each of the four sides
|
//Get minmax distance to each of the four sides
|
||||||
FixedPointCoordinate upper_left (max_lat, min_lon);
|
FixedPointCoordinate upper_left (max_lat, min_lon);
|
||||||
FixedPointCoordinate upper_right(max_lat, max_lon);
|
FixedPointCoordinate upper_right(max_lat, max_lon);
|
||||||
@ -268,7 +272,7 @@ private:
|
|||||||
const uint32_t n_id,
|
const uint32_t n_id,
|
||||||
const double dist
|
const double dist
|
||||||
) : node_id(n_id), min_dist(dist) {}
|
) : node_id(n_id), min_dist(dist) {}
|
||||||
QueryCandidate() : node_id(UINT_MAX), min_dist(DBL_MAX) {}
|
QueryCandidate() : node_id(UINT_MAX), min_dist(std::numeric_limits<double>::max()) {}
|
||||||
uint32_t node_id;
|
uint32_t node_id;
|
||||||
double min_dist;
|
double min_dist;
|
||||||
inline bool operator<(const QueryCandidate & other) const {
|
inline bool operator<(const QueryCandidate & other) const {
|
||||||
@ -461,8 +465,8 @@ public:
|
|||||||
uint32_t io_count = 0;
|
uint32_t io_count = 0;
|
||||||
uint32_t explored_tree_nodes_count = 0;
|
uint32_t explored_tree_nodes_count = 0;
|
||||||
SimpleLogger().Write() << "searching for coordinate " << input_coordinate;
|
SimpleLogger().Write() << "searching for coordinate " << input_coordinate;
|
||||||
double min_dist = DBL_MAX;
|
double min_dist = std::numeric_limits<double>::max();
|
||||||
double min_max_dist = DBL_MAX;
|
double min_max_dist = std::numeric_limits<double>::max();
|
||||||
bool found_a_nearest_edge = false;
|
bool found_a_nearest_edge = false;
|
||||||
|
|
||||||
FixedPointCoordinate nearest, current_start_coordinate, current_end_coordinate;
|
FixedPointCoordinate nearest, current_start_coordinate, current_end_coordinate;
|
||||||
@ -470,7 +474,7 @@ public:
|
|||||||
//initialize queue with root element
|
//initialize queue with root element
|
||||||
std::priority_queue<QueryCandidate> traversal_queue;
|
std::priority_queue<QueryCandidate> traversal_queue;
|
||||||
traversal_queue.push(QueryCandidate(0, m_search_tree[0].minimum_bounding_rectangle.GetMinDist(input_coordinate)));
|
traversal_queue.push(QueryCandidate(0, m_search_tree[0].minimum_bounding_rectangle.GetMinDist(input_coordinate)));
|
||||||
BOOST_ASSERT_MSG(FLT_EPSILON > (0. - traversal_queue.top().min_dist), "Root element in NN Search has min dist != 0.");
|
BOOST_ASSERT_MSG(std::numberic_limits<double>::epsilon() > (0. - traversal_queue.top().min_dist), "Root element in NN Search has min dist != 0.");
|
||||||
|
|
||||||
while(!traversal_queue.empty()) {
|
while(!traversal_queue.empty()) {
|
||||||
const QueryCandidate current_query_node = traversal_queue.top(); traversal_queue.pop();
|
const QueryCandidate current_query_node = traversal_queue.top(); traversal_queue.pop();
|
||||||
@ -595,6 +599,113 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
bool LocateClosestEndPointForCoordinate(
|
||||||
|
const FixedPointCoordinate & input_coordinate,
|
||||||
|
FixedPointCoordinate & result_coordinate,
|
||||||
|
const unsigned zoom_level
|
||||||
|
) {
|
||||||
|
bool ignore_tiny_components = (zoom_level <= 14);
|
||||||
|
DataT nearest_edge;
|
||||||
|
double min_dist = std::numeric_limits<double>::max();
|
||||||
|
double min_max_dist = std::numeric_limits<double>::max();
|
||||||
|
bool found_a_nearest_edge = false;
|
||||||
|
|
||||||
|
//initialize queue with root element
|
||||||
|
std::priority_queue<QueryCandidate> traversal_queue;
|
||||||
|
double current_min_dist = m_search_tree[0].minimum_bounding_rectangle.GetMinDist(input_coordinate);
|
||||||
|
traversal_queue.push(
|
||||||
|
QueryCandidate(0, current_min_dist)
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
std::numeric_limits<double>::epsilon() > (0. - traversal_queue.top().min_dist),
|
||||||
|
"Root element in NN Search has min dist != 0."
|
||||||
|
);
|
||||||
|
|
||||||
|
while(!traversal_queue.empty()) {
|
||||||
|
const QueryCandidate current_query_node = traversal_queue.top();
|
||||||
|
traversal_queue.pop();
|
||||||
|
|
||||||
|
const bool prune_downward = (current_query_node.min_dist >= min_max_dist);
|
||||||
|
const bool prune_upward = (current_query_node.min_dist >= min_dist);
|
||||||
|
if( !prune_downward && !prune_upward ) { //downward pruning
|
||||||
|
TreeNode & current_tree_node = m_search_tree[current_query_node.node_id];
|
||||||
|
if (current_tree_node.child_is_on_disk) {
|
||||||
|
LeafNode current_leaf_node;
|
||||||
|
LoadLeafFromDisk(
|
||||||
|
current_tree_node.children[0],
|
||||||
|
current_leaf_node
|
||||||
|
);
|
||||||
|
for(uint32_t i = 0; i < current_leaf_node.object_count; ++i) {
|
||||||
|
const DataT & current_edge = current_leaf_node.objects[i];
|
||||||
|
if(
|
||||||
|
ignore_tiny_components &&
|
||||||
|
current_edge.belongsToTinyComponent
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(current_edge.isIgnored()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
double current_minimum_distance = ApproximateDistance(
|
||||||
|
input_coordinate.lat,
|
||||||
|
input_coordinate.lon,
|
||||||
|
current_edge.lat1,
|
||||||
|
current_edge.lon1
|
||||||
|
);
|
||||||
|
if( current_minimum_distance < min_dist ) {
|
||||||
|
//found a new minimum
|
||||||
|
min_dist = current_minimum_distance;
|
||||||
|
result_coordinate.lat = current_edge.lat1;
|
||||||
|
result_coordinate.lon = current_edge.lon1;
|
||||||
|
found_a_nearest_edge = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
current_minimum_distance = ApproximateDistance(
|
||||||
|
input_coordinate.lat,
|
||||||
|
input_coordinate.lon,
|
||||||
|
current_edge.lat2,
|
||||||
|
current_edge.lon2
|
||||||
|
);
|
||||||
|
|
||||||
|
if( current_minimum_distance < min_dist ) {
|
||||||
|
//found a new minimum
|
||||||
|
min_dist = current_minimum_distance;
|
||||||
|
result_coordinate.lat = current_edge.lat2;
|
||||||
|
result_coordinate.lon = current_edge.lon2;
|
||||||
|
found_a_nearest_edge = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//traverse children, prune if global mindist is smaller than local one
|
||||||
|
for (uint32_t i = 0; i < current_tree_node.child_count; ++i) {
|
||||||
|
const int32_t child_id = current_tree_node.children[i];
|
||||||
|
const TreeNode & child_tree_node = m_search_tree[child_id];
|
||||||
|
const RectangleT & child_rectangle = child_tree_node.minimum_bounding_rectangle;
|
||||||
|
const double current_min_dist = child_rectangle.GetMinDist(input_coordinate);
|
||||||
|
const double current_min_max_dist = child_rectangle.GetMinMaxDist(input_coordinate);
|
||||||
|
if( current_min_max_dist < min_max_dist ) {
|
||||||
|
min_max_dist = current_min_max_dist;
|
||||||
|
}
|
||||||
|
if (current_min_dist > min_max_dist) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (current_min_dist > min_dist) { //upward pruning
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
traversal_queue.push(
|
||||||
|
QueryCandidate(child_id, current_min_dist)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found_a_nearest_edge;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool FindPhantomNodeForCoordinate(
|
bool FindPhantomNodeForCoordinate(
|
||||||
const FixedPointCoordinate & input_coordinate,
|
const FixedPointCoordinate & input_coordinate,
|
||||||
PhantomNode & result_phantom_node,
|
PhantomNode & result_phantom_node,
|
||||||
@ -607,8 +718,8 @@ public:
|
|||||||
uint32_t io_count = 0;
|
uint32_t io_count = 0;
|
||||||
uint32_t explored_tree_nodes_count = 0;
|
uint32_t explored_tree_nodes_count = 0;
|
||||||
//SimpleLogger().Write() << "searching for coordinate " << input_coordinate;
|
//SimpleLogger().Write() << "searching for coordinate " << input_coordinate;
|
||||||
double min_dist = DBL_MAX;
|
double min_dist = std::numeric_limits<double>::max();
|
||||||
double min_max_dist = DBL_MAX;
|
double min_max_dist = std::numeric_limits<double>::max();
|
||||||
bool found_a_nearest_edge = false;
|
bool found_a_nearest_edge = false;
|
||||||
|
|
||||||
FixedPointCoordinate nearest, current_start_coordinate, current_end_coordinate;
|
FixedPointCoordinate nearest, current_start_coordinate, current_end_coordinate;
|
||||||
@ -621,7 +732,7 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
BOOST_ASSERT_MSG(
|
BOOST_ASSERT_MSG(
|
||||||
FLT_EPSILON > (0. - traversal_queue.top().min_dist),
|
std::numeric_limits<double>::epsilon() > (0. - traversal_queue.top().min_dist),
|
||||||
"Root element in NN Search has min dist != 0."
|
"Root element in NN Search has min dist != 0."
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -637,7 +748,6 @@ public:
|
|||||||
LeafNode current_leaf_node;
|
LeafNode current_leaf_node;
|
||||||
LoadLeafFromDisk(current_tree_node.children[0], current_leaf_node);
|
LoadLeafFromDisk(current_tree_node.children[0], current_leaf_node);
|
||||||
++io_count;
|
++io_count;
|
||||||
//SimpleLogger().Write() << "checking " << current_leaf_node.object_count << " elements";
|
|
||||||
for(uint32_t i = 0; i < current_leaf_node.object_count; ++i) {
|
for(uint32_t i = 0; i < current_leaf_node.object_count; ++i) {
|
||||||
DataT & current_edge = current_leaf_node.objects[i];
|
DataT & current_edge = current_leaf_node.objects[i];
|
||||||
if(ignore_tiny_components && current_edge.belongsToTinyComponent) {
|
if(ignore_tiny_components && current_edge.belongsToTinyComponent) {
|
||||||
@ -691,16 +801,14 @@ public:
|
|||||||
current_end_coordinate
|
current_end_coordinate
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
|
|
||||||
BOOST_ASSERT_MSG(current_edge.id != result_phantom_node.edgeBasedNode, "IDs not different");
|
BOOST_ASSERT_MSG(current_edge.id != result_phantom_node.edgeBasedNode, "IDs not different");
|
||||||
//SimpleLogger().Write() << "found bidirected edge on nodes " << current_edge.id << " and " << result_phantom_node.edgeBasedNode;
|
|
||||||
result_phantom_node.weight2 = current_edge.weight;
|
result_phantom_node.weight2 = current_edge.weight;
|
||||||
if(current_edge.id < result_phantom_node.edgeBasedNode) {
|
if(current_edge.id < result_phantom_node.edgeBasedNode) {
|
||||||
result_phantom_node.edgeBasedNode = current_edge.id;
|
result_phantom_node.edgeBasedNode = current_edge.id;
|
||||||
std::swap(result_phantom_node.weight1, result_phantom_node.weight2);
|
std::swap(result_phantom_node.weight1, result_phantom_node.weight2);
|
||||||
std::swap(current_end_coordinate, current_start_coordinate);
|
std::swap(current_end_coordinate, current_start_coordinate);
|
||||||
// SimpleLogger().Write() <<"case 2";
|
|
||||||
}
|
}
|
||||||
//SimpleLogger().Write() << "w1: " << result_phantom_node.weight1 << ", w2: " << result_phantom_node.weight2;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -748,9 +856,13 @@ public:
|
|||||||
return found_a_nearest_edge;
|
return found_a_nearest_edge;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline void LoadLeafFromDisk(const uint32_t leaf_id, LeafNode& result_node) {
|
inline void LoadLeafFromDisk(const uint32_t leaf_id, LeafNode& result_node) {
|
||||||
if(!thread_local_rtree_stream.get() || !thread_local_rtree_stream->is_open()) {
|
if(
|
||||||
|
!thread_local_rtree_stream.get() ||
|
||||||
|
!thread_local_rtree_stream->is_open()
|
||||||
|
) {
|
||||||
thread_local_rtree_stream.reset(
|
thread_local_rtree_stream.reset(
|
||||||
new boost::filesystem::ifstream(
|
new boost::filesystem::ifstream(
|
||||||
m_leaf_node_filename,
|
m_leaf_node_filename,
|
||||||
@ -772,14 +884,14 @@ private:
|
|||||||
const FixedPointCoordinate& source,
|
const FixedPointCoordinate& source,
|
||||||
const FixedPointCoordinate& target,
|
const FixedPointCoordinate& target,
|
||||||
FixedPointCoordinate& nearest, double *r) const {
|
FixedPointCoordinate& nearest, double *r) const {
|
||||||
const double x = static_cast<double>(inputPoint.lat);
|
const double x = inputPoint.lat/COORDINATE_PRECISION;
|
||||||
const double y = static_cast<double>(inputPoint.lon);
|
const double y = inputPoint.lon/COORDINATE_PRECISION;
|
||||||
const double a = static_cast<double>(source.lat);
|
const double a = source.lat/COORDINATE_PRECISION;
|
||||||
const double b = static_cast<double>(source.lon);
|
const double b = source.lon/COORDINATE_PRECISION;
|
||||||
const double c = static_cast<double>(target.lat);
|
const double c = target.lat/COORDINATE_PRECISION;
|
||||||
const double d = static_cast<double>(target.lon);
|
const double d = target.lon/COORDINATE_PRECISION;
|
||||||
double p,q,mX,nY;
|
double p,q,mX,nY;
|
||||||
if(fabs(a-c) > FLT_EPSILON){
|
if(std::fabs(a-c) > std::numeric_limits<double>::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)
|
||||||
p = ((x + (m*y)) + (m*m*a - m*b))/(1. + m*m);
|
p = ((x + (m*y)) + (m*m*a - m*b))/(1. + m*m);
|
||||||
@ -809,8 +921,8 @@ private:
|
|||||||
// return std::sqrt(((d - y)*(d - y) + (c - x)*(c - x)));
|
// return std::sqrt(((d - y)*(d - y) + (c - x)*(c - x)));
|
||||||
}
|
}
|
||||||
// point lies in between
|
// point lies in between
|
||||||
nearest.lat = p;
|
nearest.lat = p*COORDINATE_PRECISION;
|
||||||
nearest.lon = q;
|
nearest.lon = q*COORDINATE_PRECISION;
|
||||||
// return std::sqrt((p-x)*(p-x) + (q-y)*(q-y));
|
// return std::sqrt((p-x)*(p-x) + (q-y)*(q-y));
|
||||||
return (p-x)*(p-x) + (q-y)*(q-y);
|
return (p-x)*(p-x) + (q-y)*(q-y);
|
||||||
}
|
}
|
||||||
@ -820,7 +932,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline bool DoubleEpsilonCompare(const double d1, const double d2) const {
|
inline bool DoubleEpsilonCompare(const double d1, const double d2) const {
|
||||||
return (std::fabs(d1 - d2) < FLT_EPSILON);
|
return (std::fabs(d1 - d2) < std::numeric_limits<double>::epsilon() );
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TURNINSTRUCTIONS_H_
|
#ifndef TURNINSTRUCTIONS_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FASTXORHASH_H_
|
#ifndef FASTXORHASH_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef XORFASTHASHSTORAGE_H_
|
#ifndef XORFASTHASHSTORAGE_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BASE_DESCRIPTOR_H_
|
#ifndef BASE_DESCRIPTOR_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "DescriptionFactory.h"
|
#include "DescriptionFactory.h"
|
||||||
@ -166,7 +173,7 @@ void DescriptionFactory::Run(const SearchEngine &sEngine, const unsigned zoomLev
|
|||||||
// SimpleLogger().Write() << "#segs: " << pathDescription.size();
|
// SimpleLogger().Write() << "#segs: " << pathDescription.size();
|
||||||
|
|
||||||
//Post-processing to remove empty or nearly empty path segments
|
//Post-processing to remove empty or nearly empty path segments
|
||||||
if(FLT_EPSILON > pathDescription.back().length) {
|
if(std::numeric_limits<double>::epsilon() > pathDescription.back().length) {
|
||||||
// SimpleLogger().Write() << "#segs: " << pathDescription.size() << ", last ratio: " << targetPhantom.ratio << ", length: " << pathDescription.back().length;
|
// SimpleLogger().Write() << "#segs: " << pathDescription.size() << ", last ratio: " << targetPhantom.ratio << ", length: " << pathDescription.back().length;
|
||||||
if(pathDescription.size() > 2){
|
if(pathDescription.size() > 2){
|
||||||
pathDescription.pop_back();
|
pathDescription.pop_back();
|
||||||
@ -178,7 +185,7 @@ void DescriptionFactory::Run(const SearchEngine &sEngine, const unsigned zoomLev
|
|||||||
} else {
|
} else {
|
||||||
pathDescription[indexOfSegmentBegin].duration *= (1.-targetPhantom.ratio);
|
pathDescription[indexOfSegmentBegin].duration *= (1.-targetPhantom.ratio);
|
||||||
}
|
}
|
||||||
if(FLT_EPSILON > pathDescription[0].length) {
|
if(std::numeric_limits<double>::epsilon() > pathDescription[0].length) {
|
||||||
//TODO: this is never called actually?
|
//TODO: this is never called actually?
|
||||||
if(pathDescription.size() > 2) {
|
if(pathDescription.size() > 2) {
|
||||||
pathDescription.erase(pathDescription.begin());
|
pathDescription.erase(pathDescription.begin());
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DESCRIPTIONFACTORY_H_
|
#ifndef DESCRIPTIONFACTORY_H_
|
||||||
@ -30,6 +37,7 @@
|
|||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
/* This class is fed with all way segments in consecutive order
|
/* This class is fed with all way segments in consecutive order
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef GPX_DESCRIPTOR_H_
|
#ifndef GPX_DESCRIPTOR_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef JSON_DESCRIPTOR_H_
|
#ifndef JSON_DESCRIPTOR_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BaseParser.h"
|
#include "BaseParser.h"
|
||||||
@ -72,9 +79,6 @@ void BaseParser::ParseNodeInLua(ImportNode& n, lua_State* localLuaState) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BaseParser::ParseWayInLua(ExtractionWay& w, lua_State* localLuaState) {
|
void BaseParser::ParseWayInLua(ExtractionWay& w, lua_State* localLuaState) {
|
||||||
if(2 > w.path.size()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
luabind::call_function<void>( localLuaState, "way_function", boost::ref(w) );
|
luabind::call_function<void>( localLuaState, "way_function", boost::ref(w) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BASEPARSER_H_
|
#ifndef BASEPARSER_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ExtractionContainers.h"
|
#include "ExtractionContainers.h"
|
||||||
@ -111,7 +118,10 @@ void ExtractionContainers::PrepareData(const std::string & output_file_name, con
|
|||||||
restrictionsIT->restriction.toNode = wayStartAndEndEdgeIT->firstStart;
|
restrictionsIT->restriction.toNode = wayStartAndEndEdgeIT->firstStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(UINT_MAX != restrictionsIT->restriction.fromNode && UINT_MAX != restrictionsIT->restriction.toNode) {
|
if(
|
||||||
|
UINT_MAX != restrictionsIT->restriction.fromNode &&
|
||||||
|
UINT_MAX != restrictionsIT->restriction.toNode
|
||||||
|
) {
|
||||||
++usableRestrictionsCounter;
|
++usableRestrictionsCounter;
|
||||||
}
|
}
|
||||||
++restrictionsIT;
|
++restrictionsIT;
|
||||||
@ -123,8 +133,15 @@ void ExtractionContainers::PrepareData(const std::string & output_file_name, con
|
|||||||
restrictionsOutstream.open(restrictionsFileName.c_str(), std::ios::binary);
|
restrictionsOutstream.open(restrictionsFileName.c_str(), std::ios::binary);
|
||||||
restrictionsOutstream.write((char*)&uuid, sizeof(UUID));
|
restrictionsOutstream.write((char*)&uuid, sizeof(UUID));
|
||||||
restrictionsOutstream.write((char*)&usableRestrictionsCounter, sizeof(unsigned));
|
restrictionsOutstream.write((char*)&usableRestrictionsCounter, sizeof(unsigned));
|
||||||
for(restrictionsIT = restrictionsVector.begin(); restrictionsIT != restrictionsVector.end(); ++restrictionsIT) {
|
for(
|
||||||
if(UINT_MAX != restrictionsIT->restriction.fromNode && UINT_MAX != restrictionsIT->restriction.toNode) {
|
restrictionsIT = restrictionsVector.begin();
|
||||||
|
restrictionsIT != restrictionsVector.end();
|
||||||
|
++restrictionsIT
|
||||||
|
) {
|
||||||
|
if(
|
||||||
|
UINT_MAX != restrictionsIT->restriction.fromNode &&
|
||||||
|
UINT_MAX != restrictionsIT->restriction.toNode
|
||||||
|
) {
|
||||||
restrictionsOutstream.write((char *)&(restrictionsIT->restriction), sizeof(TurnRestriction));
|
restrictionsOutstream.write((char *)&(restrictionsIT->restriction), sizeof(TurnRestriction));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -272,33 +289,39 @@ void ExtractionContainers::PrepareData(const std::string & output_file_name, con
|
|||||||
fout.close();
|
fout.close();
|
||||||
std::cout << "ok" << std::endl;
|
std::cout << "ok" << std::endl;
|
||||||
time = get_timestamp();
|
time = get_timestamp();
|
||||||
std::cout << "[extractor] writing street name index ... " << std::flush;
|
|
||||||
std::string nameOutFileName = (output_file_name + ".names");
|
|
||||||
std::ofstream nameOutFile(nameOutFileName.c_str(), std::ios::binary);
|
|
||||||
unsigned sizeOfNameIndex = nameVector.size();
|
|
||||||
nameOutFile.write((char *)&(sizeOfNameIndex), sizeof(unsigned));
|
|
||||||
|
|
||||||
BOOST_FOREACH(const std::string & str, nameVector) {
|
std::cout << "[extractor] writing street name index ... " << std::flush;
|
||||||
unsigned lengthOfRawString = strlen(str.c_str());
|
std::string name_file_streamName = (output_file_name + ".names");
|
||||||
nameOutFile.write((char *)&(lengthOfRawString), sizeof(unsigned));
|
boost::filesystem::ofstream name_file_stream(
|
||||||
nameOutFile.write(str.c_str(), lengthOfRawString);
|
name_file_streamName,
|
||||||
|
std::ios::binary
|
||||||
|
);
|
||||||
|
|
||||||
|
const unsigned number_of_ways = name_list.size()+1;
|
||||||
|
name_file_stream.write((char *)&(number_of_ways), sizeof(unsigned));
|
||||||
|
unsigned name_lengths_prefix_sum = 0;
|
||||||
|
BOOST_FOREACH(const std::string & str, name_list) {
|
||||||
|
name_file_stream.write(
|
||||||
|
(char *)&(name_lengths_prefix_sum),
|
||||||
|
sizeof(unsigned)
|
||||||
|
);
|
||||||
|
name_lengths_prefix_sum += strlen(str.c_str());
|
||||||
|
}
|
||||||
|
name_file_stream.write(
|
||||||
|
(char *)&(name_lengths_prefix_sum),
|
||||||
|
sizeof(unsigned)
|
||||||
|
);
|
||||||
|
//duplicate on purpose!
|
||||||
|
name_file_stream.write((char *)&(name_lengths_prefix_sum), sizeof(unsigned));
|
||||||
|
BOOST_FOREACH(const std::string & str, name_list) {
|
||||||
|
const unsigned lengthOfRawString = strlen(str.c_str());
|
||||||
|
name_file_stream.write(str.c_str(), lengthOfRawString);
|
||||||
}
|
}
|
||||||
|
|
||||||
nameOutFile.close();
|
name_file_stream.close();
|
||||||
std::cout << "ok, after " << get_timestamp() - time << "s" << std::endl;
|
std::cout << "ok, after " << get_timestamp() - time << "s" << std::endl;
|
||||||
|
SimpleLogger().Write() <<
|
||||||
// time = get_timestamp();
|
"Processed " << usedNodeCounter << " nodes and " << usedEdgeCounter << " edges";
|
||||||
// cout << "[extractor] writing address list ... " << flush;
|
|
||||||
//
|
|
||||||
// adressFileName.append(".address");
|
|
||||||
// ofstream addressOutFile(adressFileName.c_str());
|
|
||||||
// for(STXXLAddressVector::iterator it = adressVector.begin(); it != adressVector.end(); it++) {
|
|
||||||
// addressOutFile << it->node.id << "|" << it->node.lat << "|" << it->node.lon << "|" << it->city << "|" << it->street << "|" << it->housenumber << "|" << it->state << "|" << it->country << "\n";
|
|
||||||
// }
|
|
||||||
// addressOutFile.close();
|
|
||||||
// cout << "ok, after " << get_timestamp() - time << "s" << endl;
|
|
||||||
|
|
||||||
SimpleLogger().Write() << "Processed " << usedNodeCounter << " nodes and " << usedEdgeCounter << " edges";
|
|
||||||
|
|
||||||
|
|
||||||
} catch ( const std::exception& e ) {
|
} catch ( const std::exception& e ) {
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EXTRACTIONCONTAINERS_H_
|
#ifndef EXTRACTIONCONTAINERS_H_
|
||||||
@ -27,6 +34,8 @@
|
|||||||
#include "../Util/UUID.h"
|
#include "../Util/UUID.h"
|
||||||
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/filesystem/fstream.hpp>
|
||||||
#include <stxxl.h>
|
#include <stxxl.h>
|
||||||
|
|
||||||
class ExtractionContainers {
|
class ExtractionContainers {
|
||||||
@ -38,30 +47,35 @@ public:
|
|||||||
typedef stxxl::vector<_RawRestrictionContainer> STXXLRestrictionsVector;
|
typedef stxxl::vector<_RawRestrictionContainer> STXXLRestrictionsVector;
|
||||||
typedef stxxl::vector<_WayIDStartAndEndEdge> STXXLWayIDStartEndVector;
|
typedef stxxl::vector<_WayIDStartAndEndEdge> STXXLWayIDStartEndVector;
|
||||||
|
|
||||||
|
|
||||||
|
STXXLNodeIDVector usedNodeIDs;
|
||||||
|
STXXLNodeVector allNodes;
|
||||||
|
STXXLEdgeVector allEdges;
|
||||||
|
STXXLStringVector name_list;
|
||||||
|
STXXLRestrictionsVector restrictionsVector;
|
||||||
|
STXXLWayIDStartEndVector wayStartEndVector;
|
||||||
|
const UUID uuid;
|
||||||
|
|
||||||
ExtractionContainers() {
|
ExtractionContainers() {
|
||||||
//Check if another instance of stxxl is already running or if there is a general problem
|
//Check if another instance of stxxl is already running or if there is a general problem
|
||||||
stxxl::vector<unsigned> testForRunningInstance;
|
stxxl::vector<unsigned> testForRunningInstance;
|
||||||
nameVector.push_back("");
|
name_list.push_back("");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~ExtractionContainers() {
|
virtual ~ExtractionContainers() {
|
||||||
usedNodeIDs.clear();
|
usedNodeIDs.clear();
|
||||||
allNodes.clear();
|
allNodes.clear();
|
||||||
allEdges.clear();
|
allEdges.clear();
|
||||||
nameVector.clear();
|
name_list.clear();
|
||||||
restrictionsVector.clear();
|
restrictionsVector.clear();
|
||||||
wayStartEndVector.clear();
|
wayStartEndVector.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareData( const std::string & output_file_name, const std::string restrictionsFileName, const unsigned amountOfRAM);
|
void PrepareData(
|
||||||
|
const std::string & output_file_name,
|
||||||
STXXLNodeIDVector usedNodeIDs;
|
const std::string restrictionsFileName,
|
||||||
STXXLNodeVector allNodes;
|
const unsigned amountOfRAM
|
||||||
STXXLEdgeVector allEdges;
|
);
|
||||||
STXXLStringVector nameVector;
|
|
||||||
STXXLRestrictionsVector restrictionsVector;
|
|
||||||
STXXLWayIDStartEndVector wayStartEndVector;
|
|
||||||
const UUID uuid;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* EXTRACTIONCONTAINERS_H_ */
|
#endif /* EXTRACTIONCONTAINERS_H_ */
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EXTRACTIONHELPERFUNCTIONS_H_
|
#ifndef EXTRACTIONHELPERFUNCTIONS_H_
|
||||||
|
@ -1,24 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "ExtractorCallbacks.h"
|
#include "ExtractorCallbacks.h"
|
||||||
|
|
||||||
ExtractorCallbacks::ExtractorCallbacks() {externalMemory = NULL; stringMap = NULL; }
|
ExtractorCallbacks::ExtractorCallbacks() {externalMemory = NULL; stringMap = NULL; }
|
||||||
@ -56,7 +62,7 @@ void ExtractorCallbacks::wayFunction(ExtractionWay &parsed_way) {
|
|||||||
parsed_way.speed = parsed_way.duration/(parsed_way.path.size()-1);
|
parsed_way.speed = parsed_way.duration/(parsed_way.path.size()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(FLT_EPSILON >= fabs(-1. - parsed_way.speed)){
|
if(std::numeric_limits<double>::epsilon() >= fabs(-1. - parsed_way.speed)){
|
||||||
SimpleLogger().Write(logDEBUG) <<
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
"found way with bogus speed, id: " << parsed_way.id;
|
"found way with bogus speed, id: " << parsed_way.id;
|
||||||
return;
|
return;
|
||||||
@ -65,8 +71,8 @@ void ExtractorCallbacks::wayFunction(ExtractionWay &parsed_way) {
|
|||||||
//Get the unique identifier for the street name
|
//Get the unique identifier for the street name
|
||||||
const StringMap::const_iterator string_map_iterator = stringMap->find(parsed_way.name);
|
const StringMap::const_iterator string_map_iterator = stringMap->find(parsed_way.name);
|
||||||
if(stringMap->end() == string_map_iterator) {
|
if(stringMap->end() == string_map_iterator) {
|
||||||
parsed_way.nameID = externalMemory->nameVector.size();
|
parsed_way.nameID = externalMemory->name_list.size();
|
||||||
externalMemory->nameVector.push_back(parsed_way.name);
|
externalMemory->name_list.push_back(parsed_way.name);
|
||||||
stringMap->insert(std::make_pair(parsed_way.name, parsed_way.nameID));
|
stringMap->insert(std::make_pair(parsed_way.name, parsed_way.nameID));
|
||||||
} else {
|
} else {
|
||||||
parsed_way.nameID = string_map_iterator->second;
|
parsed_way.nameID = string_map_iterator->second;
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EXTRACTORCALLBACKS_H_
|
#ifndef EXTRACTORCALLBACKS_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EXTRACTORSTRUCTS_H_
|
#ifndef EXTRACTORSTRUCTS_H_
|
||||||
@ -154,7 +161,7 @@ struct CmpWayByID : public std::binary_function<_WayIDStartAndEndEdge, _WayIDSta
|
|||||||
|
|
||||||
struct Cmp : public std::binary_function<NodeID, NodeID, bool> {
|
struct Cmp : public std::binary_function<NodeID, NodeID, bool> {
|
||||||
typedef NodeID value_type;
|
typedef NodeID value_type;
|
||||||
bool operator () (const NodeID & a, const NodeID & b) const {
|
bool operator () (const NodeID a, const NodeID b) const {
|
||||||
return a < b;
|
return a < b;
|
||||||
}
|
}
|
||||||
value_type max_value() {
|
value_type max_value() {
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "PBFParser.h"
|
#include "PBFParser.h"
|
||||||
@ -178,9 +185,9 @@ inline void PBFParser::parseDenseNode(_ThreadData * threadData) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const int keyValue = dense.keys_vals ( denseTagIndex+1 );
|
const int keyValue = dense.keys_vals ( denseTagIndex+1 );
|
||||||
const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(tagValue).data();
|
const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(tagValue);
|
||||||
const std::string & value = threadData->PBFprimitiveBlock.stringtable().s(keyValue).data();
|
const std::string & value = threadData->PBFprimitiveBlock.stringtable().s(keyValue);
|
||||||
extracted_nodes_vector[i].keyVals.insert(std::make_pair(key, value));
|
extracted_nodes_vector[i].keyVals.emplace(key, value);
|
||||||
denseTagIndex += 2;
|
denseTagIndex += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -191,7 +198,7 @@ inline void PBFParser::parseDenseNode(_ThreadData * threadData) {
|
|||||||
ParseNodeInLua( n, scriptingEnvironment.getLuaStateForThreadID(omp_get_thread_num()) );
|
ParseNodeInLua( n, scriptingEnvironment.getLuaStateForThreadID(omp_get_thread_num()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(ImportNode &n, extracted_nodes_vector) {
|
BOOST_FOREACH(const ImportNode &n, extracted_nodes_vector) {
|
||||||
extractor_callbacks->nodeFunction(n);
|
extractor_callbacks->nodeFunction(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,7 +216,8 @@ inline void PBFParser::parseRelation(_ThreadData * threadData) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const OSMPBF::PrimitiveGroup& group = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID );
|
const OSMPBF::PrimitiveGroup& group = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID );
|
||||||
for(int i = 0; i < group.relations_size(); ++i ) {
|
|
||||||
|
for(int i = 0, relation_size = group.relations_size(); i < relation_size; ++i ) {
|
||||||
std::string except_tag_string;
|
std::string except_tag_string;
|
||||||
const OSMPBF::Relation& inputRelation = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID ).relations(i);
|
const OSMPBF::Relation& inputRelation = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID ).relations(i);
|
||||||
bool isRestriction = false;
|
bool isRestriction = false;
|
||||||
@ -241,8 +249,12 @@ inline void PBFParser::parseRelation(_ThreadData * threadData) {
|
|||||||
if(isRestriction) {
|
if(isRestriction) {
|
||||||
int64_t lastRef = 0;
|
int64_t lastRef = 0;
|
||||||
_RawRestrictionContainer currentRestrictionContainer(isOnlyRestriction);
|
_RawRestrictionContainer currentRestrictionContainer(isOnlyRestriction);
|
||||||
for(int rolesIndex = 0; rolesIndex < inputRelation.roles_sid_size(); ++rolesIndex) {
|
for(
|
||||||
std::string role(threadData->PBFprimitiveBlock.stringtable().s( inputRelation.roles_sid( rolesIndex ) ).data());
|
int rolesIndex = 0, last_role = inputRelation.roles_sid_size();
|
||||||
|
rolesIndex < last_role;
|
||||||
|
++rolesIndex
|
||||||
|
) {
|
||||||
|
const std::string & role = threadData->PBFprimitiveBlock.stringtable().s( inputRelation.roles_sid( rolesIndex ) );
|
||||||
lastRef += inputRelation.memids(rolesIndex);
|
lastRef += inputRelation.memids(rolesIndex);
|
||||||
|
|
||||||
if(!("from" == role || "to" == role || "via" == role)) {
|
if(!("from" == role || "to" == role || "via" == role)) {
|
||||||
@ -280,7 +292,6 @@ inline void PBFParser::parseRelation(_ThreadData * threadData) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: //should not happen
|
default: //should not happen
|
||||||
//cout << "unknown";
|
|
||||||
assert(false);
|
assert(false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -309,17 +320,23 @@ inline void PBFParser::parseWay(_ThreadData * threadData) {
|
|||||||
for(int j = 0; j < number_of_keys; ++j) {
|
for(int j = 0; j < number_of_keys; ++j) {
|
||||||
const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(inputWay.keys(j));
|
const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(inputWay.keys(j));
|
||||||
const std::string & val = threadData->PBFprimitiveBlock.stringtable().s(inputWay.vals(j));
|
const std::string & val = threadData->PBFprimitiveBlock.stringtable().s(inputWay.vals(j));
|
||||||
parsed_way_vector[i].keyVals.insert(std::make_pair(key, val));
|
parsed_way_vector[i].keyVals.emplace(key, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma omp parallel for schedule ( guided )
|
#pragma omp parallel for schedule ( guided )
|
||||||
for(int i = 0; i < number_of_ways; ++i) {
|
for(int i = 0; i < number_of_ways; ++i) {
|
||||||
ExtractionWay & w = parsed_way_vector[i];
|
ExtractionWay & w = parsed_way_vector[i];
|
||||||
|
if(2 > w.path.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ParseWayInLua( w, scriptingEnvironment.getLuaStateForThreadID( omp_get_thread_num()) );
|
ParseWayInLua( w, scriptingEnvironment.getLuaStateForThreadID( omp_get_thread_num()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(ExtractionWay & w, parsed_way_vector) {
|
BOOST_FOREACH(ExtractionWay & w, parsed_way_vector) {
|
||||||
|
if(2 > w.path.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
extractor_callbacks->wayFunction(w);
|
extractor_callbacks->wayFunction(w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -330,21 +347,21 @@ inline void PBFParser::loadGroup(_ThreadData * threadData) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
const OSMPBF::PrimitiveGroup& group = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID );
|
const OSMPBF::PrimitiveGroup& group = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID );
|
||||||
threadData->entityTypeIndicator = 0;
|
threadData->entityTypeIndicator = TypeDummy;
|
||||||
if ( group.nodes_size() != 0 ) {
|
if ( 0 != group.nodes_size() ) {
|
||||||
threadData->entityTypeIndicator = TypeNode;
|
threadData->entityTypeIndicator = TypeNode;
|
||||||
}
|
}
|
||||||
if ( group.ways_size() != 0 ) {
|
if ( 0 != group.ways_size() ) {
|
||||||
threadData->entityTypeIndicator = TypeWay;
|
threadData->entityTypeIndicator = TypeWay;
|
||||||
}
|
}
|
||||||
if ( group.relations_size() != 0 ) {
|
if ( 0 != group.relations_size() ) {
|
||||||
threadData->entityTypeIndicator = TypeRelation;
|
threadData->entityTypeIndicator = TypeRelation;
|
||||||
}
|
}
|
||||||
if ( group.has_dense() ) {
|
if ( group.has_dense() ) {
|
||||||
threadData->entityTypeIndicator = TypeDenseNode;
|
threadData->entityTypeIndicator = TypeDenseNode;
|
||||||
assert( group.dense().id_size() != 0 );
|
assert( 0 != group.dense().id_size() );
|
||||||
}
|
}
|
||||||
assert( threadData->entityTypeIndicator != 0 );
|
assert( threadData->entityTypeIndicator != TypeDummy );
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void PBFParser::loadBlock(_ThreadData * threadData) {
|
inline void PBFParser::loadBlock(_ThreadData * threadData) {
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PBFPARSER_H_
|
#ifndef PBFPARSER_H_
|
||||||
@ -44,6 +51,7 @@
|
|||||||
class PBFParser : public BaseParser {
|
class PBFParser : public BaseParser {
|
||||||
|
|
||||||
enum EntityType {
|
enum EntityType {
|
||||||
|
TypeDummy = 0,
|
||||||
TypeNode = 1,
|
TypeNode = 1,
|
||||||
TypeWay = 2,
|
TypeWay = 2,
|
||||||
TypeRelation = 4,
|
TypeRelation = 4,
|
||||||
@ -53,7 +61,7 @@ class PBFParser : public BaseParser {
|
|||||||
struct _ThreadData {
|
struct _ThreadData {
|
||||||
int currentGroupID;
|
int currentGroupID;
|
||||||
int currentEntityID;
|
int currentEntityID;
|
||||||
short entityTypeIndicator;
|
EntityType entityTypeIndicator;
|
||||||
|
|
||||||
OSMPBF::BlobHeader PBFBlobHeader;
|
OSMPBF::BlobHeader PBFBlobHeader;
|
||||||
OSMPBF::Blob PBFBlob;
|
OSMPBF::Blob PBFBlob;
|
||||||
@ -75,15 +83,15 @@ private:
|
|||||||
inline void ReadData();
|
inline void ReadData();
|
||||||
inline void ParseData();
|
inline void ParseData();
|
||||||
inline void parseDenseNode (_ThreadData * threadData);
|
inline void parseDenseNode (_ThreadData * threadData);
|
||||||
inline void parseNode(_ThreadData * );
|
inline void parseNode (_ThreadData * threadData);
|
||||||
inline void parseRelation (_ThreadData * threadData);
|
inline void parseRelation (_ThreadData * threadData);
|
||||||
inline void parseWay (_ThreadData * threadData);
|
inline void parseWay (_ThreadData * threadData);
|
||||||
|
|
||||||
inline void loadGroup (_ThreadData * threadData);
|
inline void loadGroup (_ThreadData * threadData);
|
||||||
inline void loadBlock (_ThreadData * threadData);
|
inline void loadBlock (_ThreadData * threadData);
|
||||||
inline bool readPBFBlobHeader(std::fstream & stream, _ThreadData * threadData);
|
inline bool readPBFBlobHeader(std::fstream & stream, _ThreadData * threadData);
|
||||||
inline bool unpackZLIB(std::fstream &, _ThreadData * threadData);
|
inline bool unpackZLIB (std::fstream & stream, _ThreadData * threadData);
|
||||||
inline bool unpackLZMA(std::fstream &, _ThreadData * );
|
inline bool unpackLZMA (std::fstream & stream, _ThreadData * threadData);
|
||||||
inline bool readBlob (std::fstream & stream, _ThreadData * threadData);
|
inline bool readBlob (std::fstream & stream, _ThreadData * threadData);
|
||||||
inline bool readNextBlock (std::fstream & stream, _ThreadData * threadData);
|
inline bool readNextBlock (std::fstream & stream, _ThreadData * threadData);
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ScriptingEnvironment.h"
|
#include "ScriptingEnvironment.h"
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SCRIPTINGENVIRONMENT_H_
|
#ifndef SCRIPTINGENVIRONMENT_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "XMLParser.h"
|
#include "XMLParser.h"
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef XMLPARSER_H_
|
#ifndef XMLPARSER_H_
|
||||||
|
30
Gemfile.lock
30
Gemfile.lock
@ -1,23 +1,23 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: http://rubygems.org/
|
remote: http://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
builder (3.0.0)
|
builder (3.2.2)
|
||||||
cucumber (1.1.4)
|
cucumber (1.3.8)
|
||||||
builder (>= 2.1.2)
|
builder (>= 2.1.2)
|
||||||
diff-lcs (>= 1.1.2)
|
diff-lcs (>= 1.1.3)
|
||||||
gherkin (~> 2.7.1)
|
gherkin (~> 2.12.1)
|
||||||
json (>= 1.4.6)
|
multi_json (>= 1.7.5, < 2.0)
|
||||||
term-ansicolor (>= 1.0.6)
|
multi_test (>= 0.0.2)
|
||||||
diff-lcs (1.1.3)
|
diff-lcs (1.2.4)
|
||||||
gherkin (2.7.6)
|
gherkin (2.12.1)
|
||||||
json (>= 1.4.6)
|
multi_json (~> 1.3)
|
||||||
json (1.6.5)
|
multi_json (1.8.0)
|
||||||
|
multi_test (0.0.2)
|
||||||
osmlib-base (0.1.4)
|
osmlib-base (0.1.4)
|
||||||
rake (0.9.2.2)
|
rake (10.1.0)
|
||||||
rspec-expectations (2.11.3)
|
rspec-expectations (2.14.3)
|
||||||
diff-lcs (~> 1.1.3)
|
diff-lcs (>= 1.1.3, < 2.0)
|
||||||
sys-proctable (0.9.1)
|
sys-proctable (0.9.3)
|
||||||
term-ansicolor (1.0.7)
|
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
683
LICENCE.TXT
683
LICENCE.TXT
@ -1,661 +1,22 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
Version 3, 19 November 2007
|
All rights reserved.
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
are permitted provided that the following conditions are met:
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
Preamble
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
software and other kinds of works, specifically designed to ensure
|
other materials provided with the distribution.
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
The licenses for most software and other practical works are designed
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
to take away your freedom to share and change the works. By contrast,
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
share and change all versions of a program--to make sure it remains free
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
software for all its users.
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
When we speak of free software, we are referring to freedom, not
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
have the freedom to distribute copies of free software (and charge for
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
|
110
Library/OSRM.cpp
110
Library/OSRM.cpp
@ -1,94 +1,36 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "OSRM.h"
|
#include "OSRM.h"
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
|
||||||
OSRM::OSRM(const char * server_ini_path) {
|
|
||||||
if( !testDataFile(server_ini_path) ){
|
|
||||||
std::string error_message = std::string(server_ini_path) + " not found";
|
|
||||||
throw OSRMException(error_message.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
IniFile serverConfig(server_ini_path);
|
|
||||||
|
|
||||||
boost::filesystem::path base_path =
|
|
||||||
boost::filesystem::absolute(server_ini_path).parent_path();
|
|
||||||
|
|
||||||
if ( !serverConfig.Holds("hsgrData")) {
|
|
||||||
throw OSRMException("no ram index file name in server ini");
|
|
||||||
}
|
|
||||||
if ( !serverConfig.Holds("ramIndex") ) {
|
|
||||||
throw OSRMException("no mem index file name in server ini");
|
|
||||||
}
|
|
||||||
if ( !serverConfig.Holds("fileIndex") ) {
|
|
||||||
throw OSRMException("no nodes file name in server ini");
|
|
||||||
}
|
|
||||||
if ( !serverConfig.Holds("nodesData") ) {
|
|
||||||
throw OSRMException("no nodes file name in server ini");
|
|
||||||
}
|
|
||||||
if ( !serverConfig.Holds("edgesData") ) {
|
|
||||||
throw OSRMException("no edges file name in server ini");
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::filesystem::path hsgr_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("hsgrData"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
|
|
||||||
boost::filesystem::path ram_index_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("ramIndex"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
|
|
||||||
boost::filesystem::path file_index_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("fileIndex"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
|
|
||||||
boost::filesystem::path node_data_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("nodesData"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
boost::filesystem::path edge_data_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("edgesData"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
boost::filesystem::path name_data_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("namesData"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
boost::filesystem::path timestamp_path = boost::filesystem::absolute(
|
|
||||||
serverConfig.GetParameter("timestamp"),
|
|
||||||
base_path
|
|
||||||
);
|
|
||||||
|
|
||||||
objects = new QueryObjectsStorage(
|
|
||||||
hsgr_path.string(),
|
|
||||||
ram_index_path.string(),
|
|
||||||
file_index_path.string(),
|
|
||||||
node_data_path.string(),
|
|
||||||
edge_data_path.string(),
|
|
||||||
name_data_path.string(),
|
|
||||||
timestamp_path.string()
|
|
||||||
);
|
|
||||||
|
|
||||||
|
OSRM::OSRM(boost::unordered_map<const std::string,boost::filesystem::path>& paths) {
|
||||||
|
objects = new QueryObjectsStorage( paths );
|
||||||
RegisterPlugin(new HelloWorldPlugin());
|
RegisterPlugin(new HelloWorldPlugin());
|
||||||
RegisterPlugin(new LocatePlugin(objects));
|
RegisterPlugin(new LocatePlugin(objects));
|
||||||
RegisterPlugin(new NearestPlugin(objects));
|
RegisterPlugin(new NearestPlugin(objects));
|
||||||
@ -106,9 +48,9 @@ OSRM::~OSRM() {
|
|||||||
void OSRM::RegisterPlugin(BasePlugin * plugin) {
|
void OSRM::RegisterPlugin(BasePlugin * plugin) {
|
||||||
SimpleLogger().Write() << "loaded plugin: " << plugin->GetDescriptor();
|
SimpleLogger().Write() << "loaded plugin: " << plugin->GetDescriptor();
|
||||||
if( pluginMap.find(plugin->GetDescriptor()) != pluginMap.end() ) {
|
if( pluginMap.find(plugin->GetDescriptor()) != pluginMap.end() ) {
|
||||||
delete pluginMap[plugin->GetDescriptor()];
|
delete pluginMap.find(plugin->GetDescriptor())->second;
|
||||||
}
|
}
|
||||||
pluginMap.insert(std::make_pair(plugin->GetDescriptor(), plugin));
|
pluginMap.emplace(plugin->GetDescriptor(), plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSRM::RunQuery(RouteParameters & route_parameters, http::Reply & reply) {
|
void OSRM::RunQuery(RouteParameters & route_parameters, http::Reply & reply) {
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef OSRM_H
|
#ifndef OSRM_H
|
||||||
@ -30,9 +37,9 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "../Plugins/TimestampPlugin.h"
|
#include "../Plugins/TimestampPlugin.h"
|
||||||
#include "../Plugins/ViaRoutePlugin.h"
|
#include "../Plugins/ViaRoutePlugin.h"
|
||||||
#include "../Server/DataStructures/RouteParameters.h"
|
#include "../Server/DataStructures/RouteParameters.h"
|
||||||
#include "../Util/IniFile.h"
|
|
||||||
#include "../Util/InputFileUtil.h"
|
#include "../Util/InputFileUtil.h"
|
||||||
#include "../Util/OSRMException.h"
|
#include "../Util/OSRMException.h"
|
||||||
|
#include "../Util/ProgramOptions.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
#include "../Server/BasicDatastructures.h"
|
#include "../Server/BasicDatastructures.h"
|
||||||
|
|
||||||
@ -47,7 +54,7 @@ class OSRM : boost::noncopyable {
|
|||||||
typedef boost::unordered_map<std::string, BasePlugin *> PluginMap;
|
typedef boost::unordered_map<std::string, BasePlugin *> PluginMap;
|
||||||
QueryObjectsStorage * objects;
|
QueryObjectsStorage * objects;
|
||||||
public:
|
public:
|
||||||
OSRM(const char * server_ini_path);
|
OSRM(boost::unordered_map<const std::string,boost::filesystem::path>& paths);
|
||||||
~OSRM();
|
~OSRM();
|
||||||
void RunQuery(RouteParameters & route_parameters, http::Reply & reply);
|
void RunQuery(RouteParameters & route_parameters, http::Reply & reply);
|
||||||
private:
|
private:
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BASEPLUGIN_H_
|
#ifndef BASEPLUGIN_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HELLOWORLDPLUGIN_H_
|
#ifndef HELLOWORLDPLUGIN_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LOCATEPLUGIN_H_
|
#ifndef LOCATEPLUGIN_H_
|
||||||
@ -59,7 +66,7 @@ public:
|
|||||||
reply.status = http::Reply::ok;
|
reply.status = http::Reply::ok;
|
||||||
reply.content += ("{");
|
reply.content += ("{");
|
||||||
reply.content += ("\"version\":0.3,");
|
reply.content += ("\"version\":0.3,");
|
||||||
if(!nodeHelpDesk->FindNearestNodeCoordForLatLon(routeParameters.coordinates[0], result)) {
|
if(!nodeHelpDesk->LocateClosestEndPointForCoordinate(routeParameters.coordinates[0], result)) {
|
||||||
reply.content += ("\"status\":207,");
|
reply.content += ("\"status\":207,");
|
||||||
reply.content += ("\"mapped_coordinate\":[]");
|
reply.content += ("\"mapped_coordinate\":[]");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NearestPlugin_H_
|
#ifndef NearestPlugin_H_
|
||||||
@ -34,11 +41,9 @@ class NearestPlugin : public BasePlugin {
|
|||||||
public:
|
public:
|
||||||
NearestPlugin(QueryObjectsStorage * objects )
|
NearestPlugin(QueryObjectsStorage * objects )
|
||||||
:
|
:
|
||||||
names(objects->names),
|
m_query_objects(objects),
|
||||||
descriptor_string("nearest")
|
descriptor_string("nearest")
|
||||||
{
|
{
|
||||||
nodeHelpDesk = objects->nodeHelpDesk;
|
|
||||||
|
|
||||||
descriptorTable.insert(std::make_pair("" , 0)); //default descriptor
|
descriptorTable.insert(std::make_pair("" , 0)); //default descriptor
|
||||||
descriptorTable.insert(std::make_pair("json", 1));
|
descriptorTable.insert(std::make_pair("json", 1));
|
||||||
}
|
}
|
||||||
@ -53,12 +58,16 @@ public:
|
|||||||
reply = http::Reply::stockReply(http::Reply::badRequest);
|
reply = http::Reply::stockReply(http::Reply::badRequest);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
NodeInformationHelpDesk * nodeHelpDesk = m_query_objects->nodeHelpDesk;
|
||||||
//query to helpdesk
|
//query to helpdesk
|
||||||
PhantomNode result;
|
PhantomNode result;
|
||||||
nodeHelpDesk->FindPhantomNodeForCoordinate(routeParameters.coordinates[0], result, routeParameters.zoomLevel);
|
nodeHelpDesk->FindPhantomNodeForCoordinate(
|
||||||
|
routeParameters.coordinates[0],
|
||||||
|
result,
|
||||||
|
routeParameters.zoomLevel
|
||||||
|
);
|
||||||
|
|
||||||
std::string tmp;
|
std::string temp_string;
|
||||||
//json
|
//json
|
||||||
|
|
||||||
if("" != routeParameters.jsonpParameter) {
|
if("" != routeParameters.jsonpParameter) {
|
||||||
@ -70,23 +79,26 @@ public:
|
|||||||
reply.content += ("{");
|
reply.content += ("{");
|
||||||
reply.content += ("\"version\":0.3,");
|
reply.content += ("\"version\":0.3,");
|
||||||
reply.content += ("\"status\":");
|
reply.content += ("\"status\":");
|
||||||
if(UINT_MAX != result.edgeBasedNode)
|
if(UINT_MAX != result.edgeBasedNode) {
|
||||||
reply.content += "0,";
|
reply.content += "0,";
|
||||||
else
|
} else {
|
||||||
reply.content += "207,";
|
reply.content += "207,";
|
||||||
|
}
|
||||||
reply.content += ("\"mapped_coordinate\":");
|
reply.content += ("\"mapped_coordinate\":");
|
||||||
reply.content += "[";
|
reply.content += "[";
|
||||||
if(UINT_MAX != result.edgeBasedNode) {
|
if(UINT_MAX != result.edgeBasedNode) {
|
||||||
convertInternalLatLonToString(result.location.lat, tmp);
|
convertInternalLatLonToString(result.location.lat, temp_string);
|
||||||
reply.content += tmp;
|
reply.content += temp_string;
|
||||||
convertInternalLatLonToString(result.location.lon, tmp);
|
convertInternalLatLonToString(result.location.lon, temp_string);
|
||||||
reply.content += ",";
|
reply.content += ",";
|
||||||
reply.content += tmp;
|
reply.content += temp_string;
|
||||||
}
|
}
|
||||||
reply.content += "],";
|
reply.content += "],";
|
||||||
reply.content += "\"name\":\"";
|
reply.content += "\"name\":\"";
|
||||||
if(UINT_MAX != result.edgeBasedNode)
|
if(UINT_MAX != result.edgeBasedNode) {
|
||||||
reply.content += names[result.nodeBasedEdgeNameID];
|
m_query_objects->GetName(result.nodeBasedEdgeNameID, temp_string);
|
||||||
|
reply.content += temp_string;
|
||||||
|
}
|
||||||
reply.content += "\"";
|
reply.content += "\"";
|
||||||
reply.content += ",\"transactionId\":\"OSRM Routing Engine JSON Nearest (v0.3)\"";
|
reply.content += ",\"transactionId\":\"OSRM Routing Engine JSON Nearest (v0.3)\"";
|
||||||
reply.content += ("}");
|
reply.content += ("}");
|
||||||
@ -104,14 +116,13 @@ public:
|
|||||||
reply.headers[2].value = "attachment; filename=\"location.json\"";
|
reply.headers[2].value = "attachment; filename=\"location.json\"";
|
||||||
}
|
}
|
||||||
reply.headers[0].name = "Content-Length";
|
reply.headers[0].name = "Content-Length";
|
||||||
intToString(reply.content.size(), tmp);
|
intToString(reply.content.size(), temp_string);
|
||||||
reply.headers[0].value = tmp;
|
reply.headers[0].value = temp_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NodeInformationHelpDesk * nodeHelpDesk;
|
QueryObjectsStorage * m_query_objects;
|
||||||
HashTable<std::string, unsigned> descriptorTable;
|
HashTable<std::string, unsigned> descriptorTable;
|
||||||
std::vector<std::string> & names;
|
|
||||||
std::string descriptor_string;
|
std::string descriptor_string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TIMESTAMPPLUGIN_H_
|
#ifndef TIMESTAMPPLUGIN_H_
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef VIAROUTEPLUGIN_H_
|
#ifndef VIAROUTEPLUGIN_H_
|
||||||
@ -24,7 +31,6 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "BasePlugin.h"
|
#include "BasePlugin.h"
|
||||||
|
|
||||||
#include "../Algorithms/ObjectToBase64.h"
|
#include "../Algorithms/ObjectToBase64.h"
|
||||||
#include "../DataStructures/HashTable.h"
|
|
||||||
#include "../DataStructures/QueryEdge.h"
|
#include "../DataStructures/QueryEdge.h"
|
||||||
#include "../DataStructures/StaticGraph.h"
|
#include "../DataStructures/StaticGraph.h"
|
||||||
#include "../DataStructures/SearchEngine.h"
|
#include "../DataStructures/SearchEngine.h"
|
||||||
@ -35,6 +41,8 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
#include "../Util/StringUtil.h"
|
#include "../Util/StringUtil.h"
|
||||||
|
|
||||||
|
#include <boost/unordered_map.hpp>
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -43,7 +51,6 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
class ViaRoutePlugin : public BasePlugin {
|
class ViaRoutePlugin : public BasePlugin {
|
||||||
private:
|
private:
|
||||||
NodeInformationHelpDesk * nodeHelpDesk;
|
NodeInformationHelpDesk * nodeHelpDesk;
|
||||||
std::vector<std::string> & names;
|
|
||||||
StaticGraph<QueryEdge::EdgeData> * graph;
|
StaticGraph<QueryEdge::EdgeData> * graph;
|
||||||
HashTable<std::string, unsigned> descriptorTable;
|
HashTable<std::string, unsigned> descriptorTable;
|
||||||
SearchEngine * searchEnginePtr;
|
SearchEngine * searchEnginePtr;
|
||||||
@ -51,17 +58,17 @@ public:
|
|||||||
|
|
||||||
ViaRoutePlugin(QueryObjectsStorage * objects)
|
ViaRoutePlugin(QueryObjectsStorage * objects)
|
||||||
:
|
:
|
||||||
names(objects->names),
|
// objects(objects),
|
||||||
descriptor_string("viaroute")
|
descriptor_string("viaroute")
|
||||||
{
|
{
|
||||||
nodeHelpDesk = objects->nodeHelpDesk;
|
nodeHelpDesk = objects->nodeHelpDesk;
|
||||||
graph = objects->graph;
|
graph = objects->graph;
|
||||||
|
|
||||||
searchEnginePtr = new SearchEngine(graph, nodeHelpDesk, names);
|
searchEnginePtr = new SearchEngine(objects);
|
||||||
|
|
||||||
descriptorTable.insert(std::make_pair("" , 0));
|
// descriptorTable.emplace("" , 0);
|
||||||
descriptorTable.insert(std::make_pair("json", 0));
|
descriptorTable.emplace("json", 0);
|
||||||
descriptorTable.insert(std::make_pair("gpx" , 1));
|
descriptorTable.emplace("gpx" , 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~ViaRoutePlugin() {
|
virtual ~ViaRoutePlugin() {
|
||||||
@ -93,7 +100,7 @@ public:
|
|||||||
if(checksumOK && i < routeParameters.hints.size() && "" != routeParameters.hints[i]) {
|
if(checksumOK && i < routeParameters.hints.size() && "" != routeParameters.hints[i]) {
|
||||||
// SimpleLogger().Write() <<"Decoding hint: " << routeParameters.hints[i] << " for location index " << i;
|
// SimpleLogger().Write() <<"Decoding hint: " << routeParameters.hints[i] << " for location index " << i;
|
||||||
DecodeObjectFromBase64(routeParameters.hints[i], phantomNodeVector[i]);
|
DecodeObjectFromBase64(routeParameters.hints[i], phantomNodeVector[i]);
|
||||||
if(phantomNodeVector[i].isValid(nodeHelpDesk->getNumberOfNodes())) {
|
if(phantomNodeVector[i].isValid(nodeHelpDesk->GetNumberOfNodes())) {
|
||||||
// SimpleLogger().Write() << "Decoded hint " << i << " successfully";
|
// SimpleLogger().Write() << "Decoded hint " << i << " successfully";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -130,7 +137,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
_DescriptorConfig descriptorConfig;
|
_DescriptorConfig descriptorConfig;
|
||||||
unsigned descriptorType = descriptorTable[routeParameters.outputFormat];
|
|
||||||
|
unsigned descriptorType = 0;
|
||||||
|
if(descriptorTable.find(routeParameters.outputFormat) != descriptorTable.end() ) {
|
||||||
|
descriptorType = descriptorTable.find(routeParameters.outputFormat)->second;
|
||||||
|
}
|
||||||
descriptorConfig.z = routeParameters.zoomLevel;
|
descriptorConfig.z = routeParameters.zoomLevel;
|
||||||
descriptorConfig.instructions = routeParameters.printInstructions;
|
descriptorConfig.instructions = routeParameters.printInstructions;
|
||||||
descriptorConfig.geometry = routeParameters.geometry;
|
descriptorConfig.geometry = routeParameters.geometry;
|
||||||
|
27
README.TXT
27
README.TXT
@ -1,27 +0,0 @@
|
|||||||
For instructions on how to compile and run OSRM, please consult the Wiki at
|
|
||||||
|
|
||||||
https://github.com/DennisOSRM/Project-OSRM/wiki
|
|
||||||
|
|
||||||
or use our free and daily updated online service at
|
|
||||||
|
|
||||||
http://map.project-osrm.org
|
|
||||||
|
|
||||||
When using the code in a scientific publication, please cite
|
|
||||||
|
|
||||||
@inproceedings{luxen-vetter-2011,
|
|
||||||
author = {Luxen, Dennis and Vetter, Christian},
|
|
||||||
title = {Real-time routing with OpenStreetMap data},
|
|
||||||
booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems},
|
|
||||||
series = {GIS '11},
|
|
||||||
year = {2011},
|
|
||||||
isbn = {978-1-4503-1031-4},
|
|
||||||
location = {Chicago, Illinois},
|
|
||||||
pages = {513--516},
|
|
||||||
numpages = {4},
|
|
||||||
url = {http://doi.acm.org/10.1145/2093973.2094062},
|
|
||||||
doi = {10.1145/2093973.2094062},
|
|
||||||
acmid = {2094062},
|
|
||||||
publisher = {ACM},
|
|
||||||
address = {New York, NY, USA},
|
|
||||||
}
|
|
||||||
|
|
52
Rakefile
52
Rakefile
@ -59,23 +59,6 @@ def wait_for_shutdown name
|
|||||||
raise "*** Could not terminate #{name}."
|
raise "*** Could not terminate #{name}."
|
||||||
end
|
end
|
||||||
|
|
||||||
def write_server_ini osm_file
|
|
||||||
s=<<-EOF
|
|
||||||
Threads = 1
|
|
||||||
IP = 0.0.0.0
|
|
||||||
Port = #{OSRM_PORT}
|
|
||||||
|
|
||||||
hsgrData=#{osm_file}.osrm.hsgr
|
|
||||||
nodesData=#{osm_file}.osrm.nodes
|
|
||||||
edgesData=#{osm_file}.osrm.edges
|
|
||||||
ramIndex=#{osm_file}.osrm.ramIndex
|
|
||||||
fileIndex=#{osm_file}.osrm.fileIndex
|
|
||||||
namesData=#{osm_file}.osrm.names
|
|
||||||
timestamp=#{osm_file}.osrm.timestamp
|
|
||||||
EOF
|
|
||||||
File.open( 'server.ini', 'w') {|f| f.write( s ) }
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
desc "Rebuild and run tests."
|
desc "Rebuild and run tests."
|
||||||
task :default => [:build]
|
task :default => [:build]
|
||||||
@ -93,17 +76,10 @@ end
|
|||||||
|
|
||||||
desc "Setup config files."
|
desc "Setup config files."
|
||||||
task :setup do
|
task :setup do
|
||||||
Dir.mkdir "#{DATA_FOLDER}" unless File.exist? "#{DATA_FOLDER}"
|
|
||||||
['server.ini','extractor.ini','contractor.ini'].each do |file|
|
|
||||||
unless File.exist? "#{DATA_FOLDER}/#{file}"
|
|
||||||
puts "Copying #{file} template to #{DATA_FOLDER}/#{file}"
|
|
||||||
FileUtils.cp file, "#{DATA_FOLDER}/#{file}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Download OSM data."
|
desc "Download OSM data."
|
||||||
task :download => :setup do
|
task :download do
|
||||||
Dir.mkdir "#{DATA_FOLDER}" unless File.exist? "#{DATA_FOLDER}"
|
Dir.mkdir "#{DATA_FOLDER}" unless File.exist? "#{DATA_FOLDER}"
|
||||||
puts "Downloading..."
|
puts "Downloading..."
|
||||||
puts "curl http://download.geofabrik.de/europe/#{osm_data_country}-latest.osm.pbf -o #{DATA_FOLDER}/#{osm_data_country}.osm.pbf"
|
puts "curl http://download.geofabrik.de/europe/#{osm_data_country}-latest.osm.pbf -o #{DATA_FOLDER}/#{osm_data_country}.osm.pbf"
|
||||||
@ -122,26 +98,20 @@ task :crop do
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "Reprocess OSM data."
|
desc "Reprocess OSM data."
|
||||||
task :process => :setup do
|
task :process => [:extract,:prepare] do
|
||||||
Dir.chdir DATA_FOLDER do
|
|
||||||
raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf #{PROFILES_FOLDER}/#{PROFILE}.lua"
|
|
||||||
puts
|
|
||||||
raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm #{osm_data_area_name}.osrm.restrictions #{PROFILES_FOLDER}/#{PROFILE}.lua"
|
|
||||||
puts
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Extract OSM data."
|
desc "Extract OSM data."
|
||||||
task :extract => :setup do
|
task :extract do
|
||||||
Dir.chdir DATA_FOLDER do
|
Dir.chdir DATA_FOLDER do
|
||||||
raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf ../profiles/#{PROFILE}.lua"
|
raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf --profile ../profiles/#{PROFILE}.lua"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Prepare OSM data."
|
desc "Prepare OSM data."
|
||||||
task :prepare => :setup do
|
task :prepare do
|
||||||
Dir.chdir DATA_FOLDER do
|
Dir.chdir DATA_FOLDER do
|
||||||
raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm #{osm_data_area_name}.osrm.restrictions ../profiles/#{PROFILE}.lua"
|
raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm --profile ../profiles/#{PROFILE}.lua"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -158,19 +128,17 @@ task :test do
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "Run the routing server in the terminal. Press Ctrl-C to stop."
|
desc "Run the routing server in the terminal. Press Ctrl-C to stop."
|
||||||
task :run => :setup do
|
task :run do
|
||||||
Dir.chdir DATA_FOLDER do
|
Dir.chdir DATA_FOLDER do
|
||||||
write_server_ini osm_data_area_name
|
system "../#{BUILD_FOLDER}/osrm-routed #{osm_data_area_name}.osrm --port #{OSRM_PORT}"
|
||||||
system "../#{BUILD_FOLDER}/osrm-routed"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Launch the routing server in the background. Use rake:down to stop it."
|
desc "Launch the routing server in the background. Use rake:down to stop it."
|
||||||
task :up => :setup do
|
task :up do
|
||||||
Dir.chdir DATA_FOLDER do
|
Dir.chdir DATA_FOLDER do
|
||||||
abort("Already up.") if up?
|
abort("Already up.") if up?
|
||||||
write_server_ini osm_data_area_name
|
pipe = IO.popen("../#{BUILD_FOLDER}/osrm-routed #{osm_data_area_name}.osrm --port #{OSRM_PORT} 1>>osrm-routed.log 2>>osrm-routed.log")
|
||||||
pipe = IO.popen("../#{BUILD_FOLDER}/osrm-routed 1>>osrm-routed.log 2>>osrm-routed.log")
|
|
||||||
timeout = 5
|
timeout = 5
|
||||||
(timeout*10).times do
|
(timeout*10).times do
|
||||||
begin
|
begin
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ALTERNATIVEROUTES_H_
|
#ifndef ALTERNATIVEROUTES_H_
|
||||||
|
@ -1,25 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef BASICROUTINGINTERFACE_H_
|
#ifndef BASICROUTINGINTERFACE_H_
|
||||||
#define BASICROUTINGINTERFACE_H_
|
#define BASICROUTINGINTERFACE_H_
|
||||||
|
|
||||||
@ -148,7 +153,14 @@ public:
|
|||||||
recursionStack.push(std::make_pair(edge.first, middle));
|
recursionStack.push(std::make_pair(edge.first, middle));
|
||||||
} else {
|
} else {
|
||||||
assert(!ed.shortcut);
|
assert(!ed.shortcut);
|
||||||
unpackedPath.push_back(_PathData(ed.id, _queryData.nodeHelpDesk->getNameIndexFromEdgeID(ed.id), _queryData.nodeHelpDesk->getTurnInstructionFromEdgeID(ed.id), ed.distance) );
|
unpackedPath.push_back(
|
||||||
|
_PathData(
|
||||||
|
ed.id,
|
||||||
|
_queryData.nodeHelpDesk->GetNameIndexFromEdgeID(ed.id),
|
||||||
|
_queryData.nodeHelpDesk->GetTurnInstructionForEdgeID(ed.id),
|
||||||
|
ed.distance
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHORTESTPATHROUTING_H_
|
#ifndef SHORTESTPATHROUTING_H_
|
||||||
#define SHORTESTPATHROUTING_H_
|
#define SHORTESTPATHROUTING_H_
|
||||||
|
|
||||||
@ -72,15 +77,15 @@ public:
|
|||||||
|
|
||||||
//insert new starting nodes into forward heap, adjusted by previous distances.
|
//insert new starting nodes into forward heap, adjusted by previous distances.
|
||||||
if(searchFrom1stStartNode) {
|
if(searchFrom1stStartNode) {
|
||||||
forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode, -phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode);
|
forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode, distance1-phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode);
|
||||||
// INFO("fw1: " << phantomNodePair.startPhantom.edgeBasedNode << "´, w: " << -phantomNodePair.startPhantom.weight1);
|
// INFO("fw1: " << phantomNodePair.startPhantom.edgeBasedNode << "´, w: " << -phantomNodePair.startPhantom.weight1);
|
||||||
forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode, -phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode);
|
forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode, distance1-phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode);
|
||||||
// INFO("fw2: " << phantomNodePair.startPhantom.edgeBasedNode << "´, w: " << -phantomNodePair.startPhantom.weight1);
|
// INFO("fw2: " << phantomNodePair.startPhantom.edgeBasedNode << "´, w: " << -phantomNodePair.startPhantom.weight1);
|
||||||
}
|
}
|
||||||
if(phantomNodePair.startPhantom.isBidirected() && searchFrom2ndStartNode) {
|
if(phantomNodePair.startPhantom.isBidirected() && searchFrom2ndStartNode) {
|
||||||
forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, -phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1);
|
forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, distance2-phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1);
|
||||||
// INFO("fw1: " << phantomNodePair.startPhantom.edgeBasedNode+1 << "´, w: " << -phantomNodePair.startPhantom.weight2);
|
// INFO("fw1: " << phantomNodePair.startPhantom.edgeBasedNode+1 << "´, w: " << -phantomNodePair.startPhantom.weight2);
|
||||||
forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, -phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1);
|
forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, distance2-phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1);
|
||||||
// INFO("fw2: " << phantomNodePair.startPhantom.edgeBasedNode+1 << "´, w: " << -phantomNodePair.startPhantom.weight2);
|
// INFO("fw2: " << phantomNodePair.startPhantom.edgeBasedNode+1 << "´, w: " << -phantomNodePair.startPhantom.weight2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,11 +165,9 @@ public:
|
|||||||
if( *(packedPath1.end()-1) == *(temporaryPackedPath1.begin())) {
|
if( *(packedPath1.end()-1) == *(temporaryPackedPath1.begin())) {
|
||||||
packedPath2.clear();
|
packedPath2.clear();
|
||||||
packedPath2.insert(packedPath2.end(), packedPath1.begin(), packedPath1.end());
|
packedPath2.insert(packedPath2.end(), packedPath1.begin(), packedPath1.end());
|
||||||
distance2 = distance1;
|
|
||||||
} else {
|
} else {
|
||||||
packedPath1.clear();
|
packedPath1.clear();
|
||||||
packedPath1.insert(packedPath1.end(), packedPath2.begin(), packedPath2.end());
|
packedPath1.insert(packedPath1.end(), packedPath2.begin(), packedPath2.end());
|
||||||
distance1 = distance2;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//packed paths 1 and 2 may need to switch.
|
//packed paths 1 and 2 may need to switch.
|
||||||
@ -184,8 +187,8 @@ public:
|
|||||||
searchFrom2ndStartNode &= !(lastNodeID == phantomNodePair.targetPhantom.edgeBasedNode);
|
searchFrom2ndStartNode &= !(lastNodeID == phantomNodePair.targetPhantom.edgeBasedNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
distance1 += _localUpperbound1;
|
distance1 = _localUpperbound1;
|
||||||
distance2 += _localUpperbound2;
|
distance2 = _localUpperbound2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(distance1 > distance2){
|
if(distance1 > distance2){
|
||||||
|
@ -1,25 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef APIGRAMMAR_H_
|
#ifndef APIGRAMMAR_H_
|
||||||
#define APIGRAMMAR_H_
|
#define APIGRAMMAR_H_
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BASIC_DATASTRUCTURES_H
|
#ifndef BASIC_DATASTRUCTURES_H
|
||||||
@ -129,7 +136,6 @@ std::vector<boost::asio::const_buffer> Reply::HeaderstoBuffers(){
|
|||||||
buffers.push_back(ToBuffer(status));
|
buffers.push_back(ToBuffer(status));
|
||||||
for (std::size_t i = 0; i < headers.size(); ++i) {
|
for (std::size_t i = 0; i < headers.size(); ++i) {
|
||||||
Header& h = headers[i];
|
Header& h = headers[i];
|
||||||
// std::cout << h.name << ": " << h.value << std::endl;
|
|
||||||
buffers.push_back(boost::asio::buffer(h.name));
|
buffers.push_back(boost::asio::buffer(h.name));
|
||||||
buffers.push_back(boost::asio::buffer(seperators));
|
buffers.push_back(boost::asio::buffer(seperators));
|
||||||
buffers.push_back(boost::asio::buffer(h.value));
|
buffers.push_back(boost::asio::buffer(h.value));
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONNECTION_H
|
#ifndef CONNECTION_H
|
||||||
@ -25,12 +32,13 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "RequestHandler.h"
|
#include "RequestHandler.h"
|
||||||
#include "RequestParser.h"
|
#include "RequestParser.h"
|
||||||
|
|
||||||
#include <boost/asio.hpp>
|
|
||||||
#include <boost/array.hpp>
|
#include <boost/array.hpp>
|
||||||
|
#include <boost/asio.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <boost/enable_shared_from_this.hpp>
|
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
@ -39,88 +47,178 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
namespace http {
|
namespace http {
|
||||||
|
|
||||||
/// Represents a single connection from a client.
|
/// Represents a single connection from a client.
|
||||||
class Connection : public boost::enable_shared_from_this<Connection>, private boost::noncopyable {
|
class Connection : public boost::enable_shared_from_this<Connection>,
|
||||||
|
private boost::noncopyable {
|
||||||
public:
|
public:
|
||||||
explicit Connection(boost::asio::io_service& io_service, RequestHandler& handler) : strand(io_service), TCPsocket(io_service), requestHandler(handler) {}
|
explicit Connection(
|
||||||
|
boost::asio::io_service& io_service,
|
||||||
|
RequestHandler& handler
|
||||||
|
) : strand(io_service), TCP_socket(io_service), request_handler(handler) { }
|
||||||
|
|
||||||
boost::asio::ip::tcp::socket& socket() {
|
boost::asio::ip::tcp::socket& socket() {
|
||||||
return TCPsocket;
|
return TCP_socket;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Start the first asynchronous operation for the connection.
|
/// Start the first asynchronous operation for the connection.
|
||||||
void start() {
|
void start() {
|
||||||
TCPsocket.async_read_some(boost::asio::buffer(incomingDataBuffer), strand.wrap( boost::bind(&Connection::handleRead, this->shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)));
|
TCP_socket.async_read_some(
|
||||||
|
boost::asio::buffer(incoming_data_buffer),
|
||||||
|
strand.wrap( boost::bind(
|
||||||
|
&Connection::handle_read,
|
||||||
|
this->shared_from_this(),
|
||||||
|
boost::asio::placeholders::error,
|
||||||
|
boost::asio::placeholders::bytes_transferred)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handleRead(const boost::system::error_code& e, std::size_t bytes_transferred) {
|
void handle_read(
|
||||||
|
const boost::system::error_code& e,
|
||||||
|
std::size_t bytes_transferred
|
||||||
|
) {
|
||||||
if( !e ) {
|
if( !e ) {
|
||||||
CompressionType compressionType(noCompression);
|
CompressionType compression_type(noCompression);
|
||||||
boost::tribool result;
|
boost::tribool result;
|
||||||
boost::tie(result, boost::tuples::ignore) = requestParser.Parse( request, incomingDataBuffer.data(), incomingDataBuffer.data() + bytes_transferred, &compressionType);
|
boost::tie(result, boost::tuples::ignore) = request_parser.Parse(
|
||||||
|
request,
|
||||||
|
incoming_data_buffer.data(),
|
||||||
|
incoming_data_buffer.data() + bytes_transferred,
|
||||||
|
&compression_type
|
||||||
|
);
|
||||||
|
|
||||||
if( result ) {
|
if( result ) {
|
||||||
// std::cout << "----" << std::endl;
|
request.endpoint = TCP_socket.remote_endpoint().address();
|
||||||
// if(compressionType == gzipRFC1952)
|
request_handler.handle_request(request, reply);
|
||||||
// std::cout << "[debug] using gzip" << std::endl;
|
|
||||||
// if(compressionType == deflateRFC1951)
|
|
||||||
// std::cout << "[debug] using deflate" << std::endl;
|
|
||||||
// if(compressionType == noCompression)
|
|
||||||
// std::cout << "[debug] no compression" << std::endl;
|
|
||||||
request.endpoint = TCPsocket.remote_endpoint().address();
|
|
||||||
requestHandler.handle_request(request, reply);
|
|
||||||
|
|
||||||
Header compressionHeader;
|
Header compression_header;
|
||||||
std::vector<unsigned char> compressed;
|
std::vector<unsigned char> compressed_output;
|
||||||
std::vector<boost::asio::const_buffer> outputBuffer;
|
std::vector<boost::asio::const_buffer> output_buffer;
|
||||||
switch(compressionType) {
|
switch(compression_type) {
|
||||||
case deflateRFC1951:
|
case deflateRFC1951:
|
||||||
compressionHeader.name = "Content-Encoding";
|
compression_header.name = "Content-Encoding";
|
||||||
compressionHeader.value = "deflate";
|
compression_header.value = "deflate";
|
||||||
reply.headers.insert(reply.headers.begin(), compressionHeader); //push_back(compressionHeader);
|
reply.headers.insert(
|
||||||
compressCharArray(reply.content.c_str(), reply.content.length(), compressed, compressionType);
|
reply.headers.begin(),
|
||||||
reply.setSize(compressed.size());
|
compression_header
|
||||||
outputBuffer = reply.HeaderstoBuffers();
|
);
|
||||||
outputBuffer.push_back(boost::asio::buffer(compressed));
|
compressCharArray(
|
||||||
boost::asio::async_write(TCPsocket, outputBuffer, strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error)));
|
reply.content.c_str(),
|
||||||
|
reply.content.length(),
|
||||||
|
compressed_output,
|
||||||
|
compression_type
|
||||||
|
);
|
||||||
|
reply.setSize(compressed_output.size());
|
||||||
|
output_buffer = reply.HeaderstoBuffers();
|
||||||
|
output_buffer.push_back(
|
||||||
|
boost::asio::buffer(compressed_output)
|
||||||
|
);
|
||||||
|
boost::asio::async_write(
|
||||||
|
TCP_socket,
|
||||||
|
output_buffer,
|
||||||
|
strand.wrap(
|
||||||
|
boost::bind(
|
||||||
|
&Connection::handle_write,
|
||||||
|
this->shared_from_this(),
|
||||||
|
boost::asio::placeholders::error
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case gzipRFC1952:
|
case gzipRFC1952:
|
||||||
compressionHeader.name = "Content-Encoding";
|
compression_header.name = "Content-Encoding";
|
||||||
compressionHeader.value = "gzip";
|
compression_header.value = "gzip";
|
||||||
reply.headers.insert(reply.headers.begin(), compressionHeader);
|
reply.headers.insert(
|
||||||
compressCharArray(reply.content.c_str(), reply.content.length(), compressed, compressionType);
|
reply.headers.begin(),
|
||||||
reply.setSize(compressed.size());
|
compression_header
|
||||||
outputBuffer = reply.HeaderstoBuffers();
|
);
|
||||||
outputBuffer.push_back(boost::asio::buffer(compressed));
|
compressCharArray(
|
||||||
boost::asio::async_write(TCPsocket, outputBuffer, strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error)));break;
|
reply.content.c_str(),
|
||||||
|
reply.content.length(),
|
||||||
|
compressed_output,
|
||||||
|
compression_type
|
||||||
|
);
|
||||||
|
reply.setSize(compressed_output.size());
|
||||||
|
output_buffer = reply.HeaderstoBuffers();
|
||||||
|
output_buffer.push_back(
|
||||||
|
boost::asio::buffer(compressed_output)
|
||||||
|
);
|
||||||
|
boost::asio::async_write(
|
||||||
|
TCP_socket,
|
||||||
|
output_buffer,
|
||||||
|
strand.wrap(
|
||||||
|
boost::bind(
|
||||||
|
&Connection::handle_write,
|
||||||
|
this->shared_from_this(),
|
||||||
|
boost::asio::placeholders::error
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
break;
|
||||||
case noCompression:
|
case noCompression:
|
||||||
boost::asio::async_write(TCPsocket, reply.toBuffers(), strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error)));
|
boost::asio::async_write(
|
||||||
|
TCP_socket,
|
||||||
|
reply.toBuffers(),
|
||||||
|
strand.wrap(
|
||||||
|
boost::bind(
|
||||||
|
&Connection::handle_write,
|
||||||
|
this->shared_from_this(),
|
||||||
|
boost::asio::placeholders::error
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (!result) {
|
} else if (!result) {
|
||||||
reply = Reply::stockReply(Reply::badRequest);
|
reply = Reply::stockReply(Reply::badRequest);
|
||||||
boost::asio::async_write(TCPsocket, reply.toBuffers(), strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error)));
|
boost::asio::async_write(
|
||||||
|
TCP_socket,
|
||||||
|
reply.toBuffers(),
|
||||||
|
strand.wrap(
|
||||||
|
boost::bind(
|
||||||
|
&Connection::handle_write,
|
||||||
|
this->shared_from_this(),
|
||||||
|
boost::asio::placeholders::error
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
TCPsocket.async_read_some(boost::asio::buffer(incomingDataBuffer), strand.wrap( boost::bind(&Connection::handleRead, this->shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)));
|
TCP_socket.async_read_some(
|
||||||
|
boost::asio::buffer(incoming_data_buffer),
|
||||||
|
strand.wrap(
|
||||||
|
boost::bind(
|
||||||
|
&Connection::handle_read,
|
||||||
|
this->shared_from_this(),
|
||||||
|
boost::asio::placeholders::error,
|
||||||
|
boost::asio::placeholders::bytes_transferred
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle completion of a write operation.
|
/// Handle completion of a write operation.
|
||||||
void handleWrite(const boost::system::error_code& e) {
|
void handle_write(const boost::system::error_code& e) {
|
||||||
if (!e) {
|
if (!e) {
|
||||||
// Initiate graceful connection closure.
|
// Initiate graceful connection closure.
|
||||||
boost::system::error_code ignoredEC;
|
boost::system::error_code ignoredEC;
|
||||||
TCPsocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignoredEC);
|
TCP_socket.shutdown(
|
||||||
|
boost::asio::ip::tcp::socket::shutdown_both,
|
||||||
|
ignoredEC
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// No new asynchronous operations are started. This means that all shared_ptr
|
|
||||||
// references to the connection object will disappear and the object will be
|
|
||||||
// destroyed automatically after this handler returns. The connection class's
|
|
||||||
// destructor closes the socket.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void compressCharArray(const void *in_data, size_t in_data_size, std::vector<unsigned char> &buffer, CompressionType type) {
|
// Big thanks to deusty who explains how to use gzip compression by
|
||||||
|
// the right call to deflateInit2():
|
||||||
|
// http://deusty.blogspot.com/2007/07/gzip-compressiondecompression.html
|
||||||
|
void compressCharArray(
|
||||||
|
const char * in_data,
|
||||||
|
size_t in_data_size,
|
||||||
|
std::vector<unsigned char> & buffer,
|
||||||
|
CompressionType type
|
||||||
|
) {
|
||||||
const size_t BUFSIZE = 128 * 1024;
|
const size_t BUFSIZE = 128 * 1024;
|
||||||
unsigned char temp_buffer[BUFSIZE];
|
unsigned char temp_buffer[BUFSIZE];
|
||||||
|
|
||||||
@ -140,20 +238,23 @@ private:
|
|||||||
deflateInit(&strm, Z_BEST_SPEED);
|
deflateInit(&strm, Z_BEST_SPEED);
|
||||||
break;
|
break;
|
||||||
case gzipRFC1952:
|
case gzipRFC1952:
|
||||||
/*
|
deflateInit2(
|
||||||
* Big thanks to deusty who explains how to have gzip compression turned on by the right call to deflateInit2():
|
&strm,
|
||||||
* http://deusty.blogspot.com/2007/07/gzip-compressiondecompression.html
|
Z_DEFAULT_COMPRESSION,
|
||||||
*/
|
Z_DEFLATED,
|
||||||
deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, (15+16), 9, Z_DEFAULT_STRATEGY);
|
(15+16),
|
||||||
|
9,
|
||||||
|
Z_DEFAULT_STRATEGY
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(false);
|
BOOST_ASSERT_MSG(false, "should not happen");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int deflate_res = Z_OK;
|
int deflate_res = Z_OK;
|
||||||
do {
|
do {
|
||||||
if (strm.avail_out == 0) {
|
if ( 0 == strm.avail_out ) {
|
||||||
buffer.insert(buffer.end(), temp_buffer, temp_buffer + BUFSIZE);
|
buffer.insert(buffer.end(), temp_buffer, temp_buffer + BUFSIZE);
|
||||||
strm.next_out = temp_buffer;
|
strm.next_out = temp_buffer;
|
||||||
strm.avail_out = BUFSIZE;
|
strm.avail_out = BUFSIZE;
|
||||||
@ -162,17 +263,25 @@ private:
|
|||||||
|
|
||||||
} while (deflate_res == Z_OK);
|
} while (deflate_res == Z_OK);
|
||||||
|
|
||||||
assert(deflate_res == Z_STREAM_END);
|
BOOST_ASSERT_MSG(
|
||||||
buffer.insert(buffer.end(), temp_buffer, temp_buffer + BUFSIZE - strm.avail_out);
|
deflate_res == Z_STREAM_END,
|
||||||
|
"compression not properly finished"
|
||||||
|
);
|
||||||
|
|
||||||
|
buffer.insert(
|
||||||
|
buffer.end(),
|
||||||
|
temp_buffer,
|
||||||
|
temp_buffer + BUFSIZE - strm.avail_out
|
||||||
|
);
|
||||||
deflateEnd(&strm);
|
deflateEnd(&strm);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::asio::io_service::strand strand;
|
boost::asio::io_service::strand strand;
|
||||||
boost::asio::ip::tcp::socket TCPsocket;
|
boost::asio::ip::tcp::socket TCP_socket;
|
||||||
RequestHandler& requestHandler;
|
RequestHandler& request_handler;
|
||||||
boost::array<char, 8192> incomingDataBuffer;
|
boost::array<char, 8192> incoming_data_buffer;
|
||||||
Request request;
|
Request request;
|
||||||
RequestParser requestParser;
|
RequestParser request_parser;
|
||||||
Reply reply;
|
Reply reply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,79 +1,86 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "QueryObjectsStorage.h"
|
#include "QueryObjectsStorage.h"
|
||||||
|
|
||||||
QueryObjectsStorage::QueryObjectsStorage(
|
QueryObjectsStorage::QueryObjectsStorage( const ServerPaths & paths ) {
|
||||||
const std::string & hsgrPath,
|
if( paths.find("hsgrdata") == paths.end() ) {
|
||||||
const std::string & ramIndexPath,
|
|
||||||
const std::string & fileIndexPath,
|
|
||||||
const std::string & nodesPath,
|
|
||||||
const std::string & edgesPath,
|
|
||||||
const std::string & namesPath,
|
|
||||||
const std::string & timestampPath
|
|
||||||
) {
|
|
||||||
if( hsgrPath.empty() ) {
|
|
||||||
throw OSRMException("no hsgr file given in ini file");
|
throw OSRMException("no hsgr file given in ini file");
|
||||||
}
|
}
|
||||||
if( ramIndexPath.empty() ) {
|
if( paths.find("ramindex") == paths.end() ) {
|
||||||
throw OSRMException("no ram index file given in ini file");
|
throw OSRMException("no ram index file given in ini file");
|
||||||
}
|
}
|
||||||
if( fileIndexPath.empty() ) {
|
if( paths.find("fileindex") == paths.end() ) {
|
||||||
throw OSRMException("no mem index file given in ini file");
|
throw OSRMException("no mem index file given in ini file");
|
||||||
}
|
}
|
||||||
if( nodesPath.empty() ) {
|
if( paths.find("nodesdata") == paths.end() ) {
|
||||||
throw OSRMException("no nodes file given in ini file");
|
throw OSRMException("no nodes file given in ini file");
|
||||||
}
|
}
|
||||||
if( edgesPath.empty() ) {
|
if( paths.find("edgesdata") == paths.end() ) {
|
||||||
throw OSRMException("no edges file given in ini file");
|
throw OSRMException("no edges file given in ini file");
|
||||||
}
|
}
|
||||||
if( namesPath.empty() ) {
|
if( paths.find("namesdata") == paths.end() ) {
|
||||||
throw OSRMException("no names file given in ini file");
|
throw OSRMException("no names file given in ini file");
|
||||||
}
|
}
|
||||||
|
|
||||||
SimpleLogger().Write() << "loading graph data";
|
SimpleLogger().Write() << "loading graph data";
|
||||||
//Deserialize road network graph
|
//Deserialize road network graph
|
||||||
std::vector< QueryGraph::_StrNode> nodeList;
|
|
||||||
std::vector< QueryGraph::_StrEdge> edgeList;
|
ServerPaths::const_iterator paths_iterator = paths.find("hsgrdata");
|
||||||
const int n = readHSGRFromStream(
|
BOOST_ASSERT(paths.end() != paths_iterator);
|
||||||
hsgrPath,
|
const std::string & hsgr_data_string = paths_iterator->second.string();
|
||||||
nodeList,
|
|
||||||
edgeList,
|
std::vector< QueryGraph::_StrNode> node_list;
|
||||||
&checkSum
|
std::vector< QueryGraph::_StrEdge> edge_list;
|
||||||
|
const int number_of_nodes = readHSGRFromStream(
|
||||||
|
hsgr_data_string,
|
||||||
|
node_list,
|
||||||
|
edge_list,
|
||||||
|
&check_sum
|
||||||
);
|
);
|
||||||
|
|
||||||
SimpleLogger().Write() << "Data checksum is " << checkSum;
|
SimpleLogger().Write() << "Data checksum is " << check_sum;
|
||||||
graph = new QueryGraph(nodeList, edgeList);
|
graph = new QueryGraph(node_list, edge_list);
|
||||||
assert(0 == nodeList.size());
|
BOOST_ASSERT(0 == node_list.size());
|
||||||
assert(0 == edgeList.size());
|
BOOST_ASSERT(0 == edge_list.size());
|
||||||
|
|
||||||
if(timestampPath.length()) {
|
paths_iterator = paths.find("timestamp");
|
||||||
|
|
||||||
|
if(paths.end() != paths_iterator) {
|
||||||
SimpleLogger().Write() << "Loading Timestamp";
|
SimpleLogger().Write() << "Loading Timestamp";
|
||||||
std::ifstream timestampInStream(timestampPath.c_str());
|
const std::string & timestamp_string = paths_iterator->second.string();
|
||||||
if(!timestampInStream) {
|
|
||||||
SimpleLogger().Write(logWARNING) << timestampPath << " not found";
|
boost::filesystem::ifstream time_stamp_instream(timestamp_string);
|
||||||
|
if( !time_stamp_instream.good() ) {
|
||||||
|
SimpleLogger().Write(logWARNING) << timestamp_string << " not found";
|
||||||
}
|
}
|
||||||
|
|
||||||
getline(timestampInStream, timestamp);
|
getline(time_stamp_instream, timestamp);
|
||||||
timestampInStream.close();
|
time_stamp_instream.close();
|
||||||
}
|
}
|
||||||
if(!timestamp.length()) {
|
if(!timestamp.length()) {
|
||||||
timestamp = "n/a";
|
timestamp = "n/a";
|
||||||
@ -81,50 +88,96 @@ QueryObjectsStorage::QueryObjectsStorage(
|
|||||||
if(25 < timestamp.length()) {
|
if(25 < timestamp.length()) {
|
||||||
timestamp.resize(25);
|
timestamp.resize(25);
|
||||||
}
|
}
|
||||||
|
|
||||||
SimpleLogger().Write() << "Loading auxiliary information";
|
SimpleLogger().Write() << "Loading auxiliary information";
|
||||||
|
|
||||||
|
paths_iterator = paths.find("ramindex");
|
||||||
|
BOOST_ASSERT(paths.end() != paths_iterator);
|
||||||
|
const std::string & ram_index_string = paths_iterator->second.string();
|
||||||
|
paths_iterator = paths.find("fileindex");
|
||||||
|
BOOST_ASSERT(paths.end() != paths_iterator);
|
||||||
|
const std::string & file_index_string = paths_iterator->second.string();
|
||||||
|
paths_iterator = paths.find("nodesdata");
|
||||||
|
BOOST_ASSERT(paths.end() != paths_iterator);
|
||||||
|
const std::string & nodes_data_string = paths_iterator->second.string();
|
||||||
|
paths_iterator = paths.find("edgesdata");
|
||||||
|
BOOST_ASSERT(paths.end() != paths_iterator);
|
||||||
|
const std::string & edges_data_string = paths_iterator->second.string();
|
||||||
|
|
||||||
//Init nearest neighbor data structure
|
//Init nearest neighbor data structure
|
||||||
nodeHelpDesk = new NodeInformationHelpDesk(
|
nodeHelpDesk = new NodeInformationHelpDesk(
|
||||||
ramIndexPath,
|
ram_index_string,
|
||||||
fileIndexPath,
|
file_index_string,
|
||||||
nodesPath,
|
nodes_data_string,
|
||||||
edgesPath,
|
edges_data_string,
|
||||||
n,
|
number_of_nodes,
|
||||||
checkSum
|
check_sum
|
||||||
);
|
);
|
||||||
|
|
||||||
//deserialize street name list
|
//deserialize street name list
|
||||||
SimpleLogger().Write() << "Loading names index";
|
SimpleLogger().Write() << "Loading names index";
|
||||||
boost::filesystem::path names_file(namesPath);
|
|
||||||
|
|
||||||
if ( !boost::filesystem::exists( names_file ) ) {
|
paths_iterator = paths.find("namesdata");
|
||||||
|
BOOST_ASSERT(paths.end() != paths_iterator);
|
||||||
|
const std::string & names_data_string = paths_iterator->second.string();
|
||||||
|
if ( !boost::filesystem::exists( paths_iterator->second ) ) {
|
||||||
throw OSRMException("names file does not exist");
|
throw OSRMException("names file does not exist");
|
||||||
}
|
}
|
||||||
if ( 0 == boost::filesystem::file_size( names_file ) ) {
|
if ( 0 == boost::filesystem::file_size( paths_iterator->second ) ) {
|
||||||
throw OSRMException("names file is empty");
|
throw OSRMException("names file is empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::filesystem::ifstream name_stream(names_file, std::ios::binary);
|
boost::filesystem::ifstream name_stream(names_data_string, std::ios::binary);
|
||||||
unsigned size = 0;
|
unsigned size = 0;
|
||||||
name_stream.read((char *)&size, sizeof(unsigned));
|
name_stream.read((char *)&size, sizeof(unsigned));
|
||||||
BOOST_ASSERT_MSG(0 != size, "name file empty");
|
BOOST_ASSERT_MSG(0 != size, "name file broken");
|
||||||
|
|
||||||
|
m_name_begin_indices.resize(size);
|
||||||
|
name_stream.read((char*)&m_name_begin_indices[0], size*sizeof(unsigned));
|
||||||
|
name_stream.read((char *)&size, sizeof(unsigned));
|
||||||
|
BOOST_ASSERT_MSG(0 != size, "name file broken");
|
||||||
|
|
||||||
|
m_names_char_list.resize(size+1); //+1 is sentinel/dummy element
|
||||||
|
name_stream.read((char *)&m_names_char_list[0], size*sizeof(char));
|
||||||
|
BOOST_ASSERT_MSG(0 != m_names_char_list.size(), "could not load any names");
|
||||||
|
|
||||||
char buf[1024];
|
|
||||||
for( unsigned i = 0; i < size; ++i ) {
|
|
||||||
unsigned size_of_string = 0;
|
|
||||||
name_stream.read((char *)&size_of_string, sizeof(unsigned));
|
|
||||||
buf[size_of_string] = '\0'; // instead of memset
|
|
||||||
name_stream.read(buf, size_of_string);
|
|
||||||
names.push_back(buf);
|
|
||||||
}
|
|
||||||
std::vector<std::string>(names).swap(names);
|
|
||||||
BOOST_ASSERT_MSG(0 != names.size(), "could not load any names");
|
|
||||||
name_stream.close();
|
name_stream.close();
|
||||||
SimpleLogger().Write() << "All query data structures loaded";
|
SimpleLogger().Write() << "All query data structures loaded";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QueryObjectsStorage::GetName(
|
||||||
|
const unsigned name_id,
|
||||||
|
std::string & result
|
||||||
|
) const {
|
||||||
|
if(UINT_MAX == name_id) {
|
||||||
|
result = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
name_id < m_name_begin_indices.size(),
|
||||||
|
"name id too high"
|
||||||
|
);
|
||||||
|
unsigned begin_index = m_name_begin_indices[name_id];
|
||||||
|
unsigned end_index = m_name_begin_indices[name_id+1];
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
begin_index < m_names_char_list.size(),
|
||||||
|
"begin index of name too high"
|
||||||
|
);
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
end_index < m_names_char_list.size(),
|
||||||
|
"end index of name too high"
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOST_ASSERT_MSG(begin_index <= end_index, "string ends before begin");
|
||||||
|
result.clear();
|
||||||
|
result.resize(end_index - begin_index);
|
||||||
|
std::copy(
|
||||||
|
m_names_char_list.begin() + begin_index,
|
||||||
|
m_names_char_list.begin() + end_index,
|
||||||
|
result.begin()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
QueryObjectsStorage::~QueryObjectsStorage() {
|
QueryObjectsStorage::~QueryObjectsStorage() {
|
||||||
// delete names;
|
|
||||||
delete graph;
|
delete graph;
|
||||||
delete nodeHelpDesk;
|
delete nodeHelpDesk;
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,36 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef QUERYOBJECTSSTORAGE_H_
|
#ifndef QUERYOBJECTSSTORAGE_H_
|
||||||
#define QUERYOBJECTSSTORAGE_H_
|
#define QUERYOBJECTSSTORAGE_H_
|
||||||
|
|
||||||
#include "../../Util/GraphLoader.h"
|
#include "../../Util/GraphLoader.h"
|
||||||
#include "../../Util/OSRMException.h"
|
#include "../../Util/OSRMException.h"
|
||||||
|
#include "../../Util/ProgramOptions.h"
|
||||||
#include "../../Util/SimpleLogger.h"
|
#include "../../Util/SimpleLogger.h"
|
||||||
#include "../../DataStructures/NodeInformationHelpDesk.h"
|
#include "../../DataStructures/NodeInformationHelpDesk.h"
|
||||||
#include "../../DataStructures/QueryEdge.h"
|
#include "../../DataStructures/QueryEdge.h"
|
||||||
@ -42,21 +49,15 @@ struct QueryObjectsStorage {
|
|||||||
typedef QueryGraph::InputEdge InputEdge;
|
typedef QueryGraph::InputEdge InputEdge;
|
||||||
|
|
||||||
NodeInformationHelpDesk * nodeHelpDesk;
|
NodeInformationHelpDesk * nodeHelpDesk;
|
||||||
std::vector<std::string> names;
|
std::vector<char> m_names_char_list;
|
||||||
|
std::vector<unsigned> m_name_begin_indices;
|
||||||
QueryGraph * graph;
|
QueryGraph * graph;
|
||||||
std::string timestamp;
|
std::string timestamp;
|
||||||
unsigned checkSum;
|
unsigned check_sum;
|
||||||
|
|
||||||
QueryObjectsStorage(
|
void GetName( const unsigned name_id, std::string & result ) const;
|
||||||
const std::string & hsgrPath,
|
|
||||||
const std::string & ramIndexPath,
|
|
||||||
const std::string & fileIndexPath,
|
|
||||||
const std::string & nodesPath,
|
|
||||||
const std::string & edgesPath,
|
|
||||||
const std::string & namesPath,
|
|
||||||
const std::string & timestampPath
|
|
||||||
);
|
|
||||||
|
|
||||||
|
QueryObjectsStorage( const ServerPaths & paths );
|
||||||
~QueryObjectsStorage();
|
~QueryObjectsStorage();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ROUTE_PARAMETERS_H
|
#ifndef ROUTE_PARAMETERS_H
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef REQUEST_HANDLER_H
|
#ifndef REQUEST_HANDLER_H
|
||||||
@ -40,7 +47,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
class RequestHandler : private boost::noncopyable {
|
class RequestHandler : private boost::noncopyable {
|
||||||
public:
|
public:
|
||||||
typedef APIGrammar<std::string::iterator, RouteParameters> APIGrammarParser;
|
typedef APIGrammar<std::string::iterator, RouteParameters> APIGrammarParser;
|
||||||
explicit RequestHandler() { }
|
explicit RequestHandler() : routing_machine(NULL) { }
|
||||||
|
|
||||||
void handle_request(const http::Request& req, http::Reply& rep){
|
void handle_request(const http::Request& req, http::Reply& rep){
|
||||||
//parse command
|
//parse command
|
||||||
@ -90,6 +97,10 @@ public:
|
|||||||
rep.content += "^<br></pre>";
|
rep.content += "^<br></pre>";
|
||||||
} else {
|
} else {
|
||||||
//parsing done, lets call the right plugin to handle the request
|
//parsing done, lets call the right plugin to handle the request
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
routing_machine != NULL,
|
||||||
|
"pointer not init'ed"
|
||||||
|
);
|
||||||
routing_machine->RunQuery(routeParameters, rep);
|
routing_machine->RunQuery(routeParameters, rep);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef REQUEST_PARSER_H
|
#ifndef REQUEST_PARSER_H
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SERVER_H
|
#ifndef SERVER_H
|
||||||
|
@ -1,67 +1,51 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SERVERFACTORY_H_
|
#ifndef SERVERFACTORY_H_
|
||||||
#define SERVERFACTORY_H_
|
#define SERVERFACTORY_H_
|
||||||
|
|
||||||
#include "Server.h"
|
#include "Server.h"
|
||||||
#include "../Util/IniFile.h"
|
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
#include "../Util/StringUtil.h"
|
#include "../Util/StringUtil.h"
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
struct ServerFactory : boost::noncopyable {
|
struct ServerFactory : boost::noncopyable {
|
||||||
static Server * CreateServer( IniFile & serverConfig ) {
|
static Server * CreateServer(std::string& ip_address, int ip_port, int threads) {
|
||||||
int threads = omp_get_num_procs();
|
|
||||||
if( serverConfig.GetParameter("IP").empty() ) {
|
|
||||||
serverConfig.SetParameter("IP", "0.0.0.0");
|
|
||||||
}
|
|
||||||
|
|
||||||
if( serverConfig.GetParameter("Port").empty() ) {
|
|
||||||
serverConfig.SetParameter("Port", "5000");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(
|
|
||||||
stringToInt(serverConfig.GetParameter("Threads")) >= 1 &&
|
|
||||||
stringToInt(serverConfig.GetParameter("Threads")) <= threads
|
|
||||||
) {
|
|
||||||
threads = stringToInt( serverConfig.GetParameter("Threads") );
|
|
||||||
}
|
|
||||||
|
|
||||||
SimpleLogger().Write() <<
|
SimpleLogger().Write() <<
|
||||||
"http 1.1 compression handled by zlib version " << zlibVersion();
|
"http 1.1 compression handled by zlib version " << zlibVersion();
|
||||||
|
|
||||||
Server * server = new Server(
|
std::stringstream port_stream;
|
||||||
serverConfig.GetParameter("IP"),
|
port_stream << ip_port;
|
||||||
serverConfig.GetParameter("Port"),
|
return new Server( ip_address, port_stream.str(), std::min( omp_get_num_procs(), threads) );
|
||||||
threads
|
|
||||||
);
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Server * CreateServer(const char * iniFile) {
|
|
||||||
IniFile serverConfig(iniFile);
|
|
||||||
return CreateServer(serverConfig);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
@ -26,10 +33,10 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include "../DataStructures/QueryEdge.h"
|
#include "../DataStructures/QueryEdge.h"
|
||||||
#include "../DataStructures/TurnInstructions.h"
|
#include "../DataStructures/TurnInstructions.h"
|
||||||
#include "../Util/GraphLoader.h"
|
#include "../Util/GraphLoader.h"
|
||||||
#include "../Util/IniFile.h"
|
|
||||||
#include "../Util/InputFileUtil.h"
|
#include "../Util/InputFileUtil.h"
|
||||||
#include "../Util/OSRMException.h"
|
#include "../Util/OSRMException.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
|
#include "../Util/UUID.h"
|
||||||
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -58,6 +65,16 @@ int main (int argc, char * argv[]) {
|
|||||||
SimpleLogger().Write() <<
|
SimpleLogger().Write() <<
|
||||||
"Using restrictions from file: " << argv[2];
|
"Using restrictions from file: " << argv[2];
|
||||||
std::ifstream restriction_ifstream(argv[2], std::ios::binary);
|
std::ifstream restriction_ifstream(argv[2], std::ios::binary);
|
||||||
|
const UUID uuid_orig;
|
||||||
|
UUID uuid_loaded;
|
||||||
|
restriction_ifstream.read((char *) &uuid_loaded, sizeof(UUID));
|
||||||
|
|
||||||
|
if( !uuid_loaded.TestGraphUtil(uuid_orig) ) {
|
||||||
|
SimpleLogger().Write(logWARNING) <<
|
||||||
|
argv[2] << " was prepared with a different build. "
|
||||||
|
"Reprocess to get rid of this warning.";
|
||||||
|
}
|
||||||
|
|
||||||
if(!restriction_ifstream.good()) {
|
if(!restriction_ifstream.good()) {
|
||||||
throw OSRMException("Could not access <osrm-restrictions> files");
|
throw OSRMException("Could not access <osrm-restrictions> files");
|
||||||
}
|
}
|
||||||
@ -92,6 +109,11 @@ int main (int argc, char * argv[]) {
|
|||||||
);
|
);
|
||||||
input_stream.close();
|
input_stream.close();
|
||||||
|
|
||||||
|
BOOST_ASSERT_MSG(
|
||||||
|
restrictions_vector.size() == usable_restriction_count,
|
||||||
|
"size of restrictions_vector changed"
|
||||||
|
);
|
||||||
|
|
||||||
SimpleLogger().Write() <<
|
SimpleLogger().Write() <<
|
||||||
restrictions_vector.size() << " restrictions, " <<
|
restrictions_vector.size() << " restrictions, " <<
|
||||||
bollard_node_IDs_vector.size() << " bollard nodes, " <<
|
bollard_node_IDs_vector.size() << " bollard nodes, " <<
|
||||||
|
345
Tools/io-benchmark.cpp
Normal file
345
Tools/io-benchmark.cpp
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../Util/OSRMException.h"
|
||||||
|
#include "../Util/SimpleLogger.h"
|
||||||
|
#include "../Util/TimingUtil.h"
|
||||||
|
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/filesystem/fstream.hpp>
|
||||||
|
#include <boost/ref.hpp>
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <numeric>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
const unsigned number_of_elements = 268435456;
|
||||||
|
|
||||||
|
struct Statistics { double min, max, med, mean, dev; };
|
||||||
|
|
||||||
|
void RunStatistics(std::vector<double> & timings_vector, Statistics & stats) {
|
||||||
|
std::sort(timings_vector.begin(), timings_vector.end());
|
||||||
|
stats.min = timings_vector.front();
|
||||||
|
stats.max = timings_vector.back();
|
||||||
|
stats.med = timings_vector[timings_vector.size()/2];
|
||||||
|
double primary_sum = std::accumulate(
|
||||||
|
timings_vector.begin(),
|
||||||
|
timings_vector.end(),
|
||||||
|
0.0
|
||||||
|
);
|
||||||
|
stats.mean = primary_sum / timings_vector.size();
|
||||||
|
|
||||||
|
double primary_sq_sum = std::inner_product( timings_vector.begin(),
|
||||||
|
timings_vector.end(),
|
||||||
|
timings_vector.begin(),
|
||||||
|
0.0
|
||||||
|
);
|
||||||
|
stats.dev = std::sqrt(
|
||||||
|
primary_sq_sum / timings_vector.size() - (stats.mean * stats.mean)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (int argc, char * argv[]) {
|
||||||
|
LogPolicy::GetInstance().Unmute();
|
||||||
|
|
||||||
|
SimpleLogger().Write(logDEBUG) << "starting up engines, compiled at " <<
|
||||||
|
__DATE__ << ", " __TIME__;
|
||||||
|
|
||||||
|
if( 1 == argc ) {
|
||||||
|
SimpleLogger().Write(logWARNING) <<
|
||||||
|
"usage: " << argv[0] << " /path/on/device";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::filesystem::path test_path = boost::filesystem::path(argv[1]);
|
||||||
|
test_path /= "osrm.tst";
|
||||||
|
SimpleLogger().Write(logDEBUG) << "temporary file: " << test_path.string();
|
||||||
|
|
||||||
|
try {
|
||||||
|
//create files for testing
|
||||||
|
if( 2 == argc) {
|
||||||
|
//create file to test
|
||||||
|
if( boost::filesystem::exists(test_path) ) {
|
||||||
|
throw OSRMException("Data file already exists");
|
||||||
|
}
|
||||||
|
|
||||||
|
double time1, time2;
|
||||||
|
int * random_array = new int[number_of_elements];
|
||||||
|
std::generate (
|
||||||
|
random_array,
|
||||||
|
random_array+number_of_elements,
|
||||||
|
std::rand
|
||||||
|
);
|
||||||
|
#ifdef __APPLE__
|
||||||
|
FILE * fd = fopen(test_path.string().c_str(), "w");
|
||||||
|
fcntl(fileno(fd), F_NOCACHE, 1);
|
||||||
|
fcntl(fileno(fd), F_RDAHEAD, 0);
|
||||||
|
time1 = get_timestamp();
|
||||||
|
write(
|
||||||
|
fileno(fd),
|
||||||
|
(char*)random_array,
|
||||||
|
number_of_elements*sizeof(unsigned)
|
||||||
|
);
|
||||||
|
time2 = get_timestamp();
|
||||||
|
fclose(fd);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
int f = open(
|
||||||
|
test_path.string().c_str(),
|
||||||
|
O_CREAT|O_TRUNC|O_WRONLY|O_SYNC,
|
||||||
|
S_IRWXU
|
||||||
|
);
|
||||||
|
time1 = get_timestamp();
|
||||||
|
int ret = write(
|
||||||
|
f,
|
||||||
|
random_array,
|
||||||
|
number_of_elements*sizeof(unsigned)
|
||||||
|
);
|
||||||
|
if(-1 == ret) {
|
||||||
|
throw OSRMException("could not write random data file");
|
||||||
|
}
|
||||||
|
time2 = get_timestamp();
|
||||||
|
close(f);
|
||||||
|
#endif
|
||||||
|
delete[] random_array;
|
||||||
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
|
"writing raw 1GB took " << (time2-time1)*1000 << "ms";
|
||||||
|
SimpleLogger().Write() << "raw write performance: " <<
|
||||||
|
std::setprecision(5) << std::fixed <<
|
||||||
|
1024*1024/((time2-time1)*1000) << "MB/sec";
|
||||||
|
|
||||||
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
|
"finished creation of random data. Flush disk cache now!";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//
|
||||||
|
// Run Non-Cached I/O benchmarks
|
||||||
|
//
|
||||||
|
|
||||||
|
if( !boost::filesystem::exists(test_path) ) {
|
||||||
|
throw OSRMException("data file does not exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
double time1, time2;
|
||||||
|
//volatiles do not get optimized
|
||||||
|
Statistics stats;
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
volatile unsigned single_block[1024];
|
||||||
|
char * raw_array = new char[number_of_elements*sizeof(unsigned)];
|
||||||
|
FILE * fd = fopen(test_path.string().c_str(), "r");
|
||||||
|
fcntl(fileno(fd), F_NOCACHE, 1);
|
||||||
|
fcntl(fileno(fd), F_RDAHEAD, 0);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
char * single_block = (char*) memalign(
|
||||||
|
512,
|
||||||
|
1024*sizeof(unsigned)
|
||||||
|
);
|
||||||
|
|
||||||
|
int f = open(test_path.string().c_str(), O_RDONLY|O_DIRECT|O_SYNC);
|
||||||
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
|
"opened, error: " << strerror(errno);
|
||||||
|
char * raw_array = (char*) memalign(
|
||||||
|
512,
|
||||||
|
number_of_elements*sizeof(unsigned)
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
time1 = get_timestamp();
|
||||||
|
#ifdef __APPLE__
|
||||||
|
read(fileno(fd), raw_array, number_of_elements*sizeof(unsigned));
|
||||||
|
close(fileno(fd));
|
||||||
|
fd = fopen(test_path.string().c_str(), "r");
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
int ret = read(f, raw_array, number_of_elements*sizeof(unsigned));
|
||||||
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
|
"read " << ret << " bytes, error: " << strerror(errno);
|
||||||
|
close(f);
|
||||||
|
f = open(test_path.string().c_str(), O_RDONLY|O_DIRECT|O_SYNC);
|
||||||
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
|
"opened, error: " << strerror(errno);
|
||||||
|
#endif
|
||||||
|
time2 = get_timestamp();
|
||||||
|
|
||||||
|
SimpleLogger().Write(logDEBUG) <<
|
||||||
|
"reading raw 1GB took " << (time2-time1)*1000 << "ms";
|
||||||
|
SimpleLogger().Write() << "raw read performance: " <<
|
||||||
|
std::setprecision(5) << std::fixed <<
|
||||||
|
1024*1024/((time2-time1)*1000) << "MB/sec";
|
||||||
|
|
||||||
|
std::vector<double> timing_results_raw_random;
|
||||||
|
SimpleLogger().Write(logDEBUG) << "running 1000 random I/Os of 4KB";
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
fseek(fd, 0, SEEK_SET);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
lseek(f, 0, SEEK_SET);
|
||||||
|
#endif
|
||||||
|
//make 1000 random access, time each I/O seperately
|
||||||
|
unsigned number_of_blocks = (number_of_elements*sizeof(unsigned)-1)/4096;
|
||||||
|
for(unsigned i = 0; i < 1000; ++i) {
|
||||||
|
unsigned block_to_read = std::rand()%number_of_blocks;
|
||||||
|
off_t current_offset = block_to_read*4096;
|
||||||
|
time1 = get_timestamp();
|
||||||
|
#ifdef __APPLE__
|
||||||
|
int ret1 = fseek(fd, current_offset, SEEK_SET);
|
||||||
|
int ret2 = read(fileno(fd), (char*)&single_block[0], 4096);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
int ret1 = lseek(f, current_offset, SEEK_SET);
|
||||||
|
int ret2 = read(f, (char*)single_block, 4096);
|
||||||
|
#endif
|
||||||
|
time2 = get_timestamp();
|
||||||
|
if( ((off_t)-1) == ret1) {
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "offset: " << current_offset;
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "seek error " << strerror(errno);
|
||||||
|
throw OSRMException("seek error");
|
||||||
|
}
|
||||||
|
if(-1 == ret2) {
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "offset: " << current_offset;
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "read error " << strerror(errno);
|
||||||
|
throw OSRMException("read error");
|
||||||
|
}
|
||||||
|
timing_results_raw_random.push_back((time2-time1)*1000.);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do statistics
|
||||||
|
SimpleLogger().Write(logDEBUG) << "running raw random I/O statistics";
|
||||||
|
std::ofstream random_csv("random.csv", std::ios::trunc);
|
||||||
|
for(unsigned i = 0; i < timing_results_raw_random.size(); ++i) {
|
||||||
|
random_csv << i << ", " << timing_results_raw_random[i] << std::endl;
|
||||||
|
}
|
||||||
|
random_csv.close();
|
||||||
|
RunStatistics(timing_results_raw_random, stats);
|
||||||
|
|
||||||
|
SimpleLogger().Write() << "raw random I/O: " <<
|
||||||
|
std::setprecision(5) << std::fixed <<
|
||||||
|
"min: " << stats.min << "ms, " <<
|
||||||
|
"mean: " << stats.mean << "ms, " <<
|
||||||
|
"med: " << stats.med << "ms, " <<
|
||||||
|
"max: " << stats.max << "ms, " <<
|
||||||
|
"dev: " << stats.dev << "ms";
|
||||||
|
|
||||||
|
std::vector<double> timing_results_raw_seq;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
fseek(fd, 0, SEEK_SET);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
lseek(f, 0, SEEK_SET);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//read every 100th block
|
||||||
|
for(
|
||||||
|
unsigned i = 0;
|
||||||
|
i < 1000;
|
||||||
|
++i
|
||||||
|
) {
|
||||||
|
off_t current_offset = i*4096;
|
||||||
|
time1 = get_timestamp();
|
||||||
|
#ifdef __APPLE__
|
||||||
|
int ret1 = fseek(fd, current_offset, SEEK_SET);
|
||||||
|
int ret2 = read(fileno(fd), (char*)&single_block, 4096);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
int ret1 = lseek(f, current_offset, SEEK_SET);
|
||||||
|
|
||||||
|
int ret2 = read(f, (char*)single_block, 4096);
|
||||||
|
#endif
|
||||||
|
time2 = get_timestamp();
|
||||||
|
if( ((off_t)-1) == ret1) {
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "offset: " << current_offset;
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "seek error " << strerror(errno);
|
||||||
|
throw OSRMException("seek error");
|
||||||
|
}
|
||||||
|
if(-1 == ret2) {
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "offset: " << current_offset;
|
||||||
|
SimpleLogger().Write(logWARNING)
|
||||||
|
<< "read error " << strerror(errno);
|
||||||
|
throw OSRMException("read error");
|
||||||
|
}
|
||||||
|
timing_results_raw_seq.push_back((time2-time1)*1000.);
|
||||||
|
}
|
||||||
|
#ifdef __APPLE__
|
||||||
|
fclose(fd);
|
||||||
|
// free(single_element);
|
||||||
|
free(raw_array);
|
||||||
|
// free(single_block);
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
close(f);
|
||||||
|
#endif
|
||||||
|
//Do statistics
|
||||||
|
SimpleLogger().Write(logDEBUG) << "running sequential I/O statistics";
|
||||||
|
//print simple statistics: min, max, median, variance
|
||||||
|
std::ofstream seq_csv("sequential.csv", std::ios::trunc);
|
||||||
|
for(unsigned i = 0; i < timing_results_raw_seq.size(); ++i) {
|
||||||
|
seq_csv << i << ", " << timing_results_raw_seq[i] << std::endl;
|
||||||
|
}
|
||||||
|
seq_csv.close();
|
||||||
|
RunStatistics(timing_results_raw_seq, stats);
|
||||||
|
SimpleLogger().Write() << "raw sequential I/O: " <<
|
||||||
|
std::setprecision(5) << std::fixed <<
|
||||||
|
"min: " << stats.min << "ms, " <<
|
||||||
|
"mean: " << stats.mean << "ms, " <<
|
||||||
|
"med: " << stats.med << "ms, " <<
|
||||||
|
"max: " << stats.max << "ms, " <<
|
||||||
|
"dev: " << stats.dev << "ms";
|
||||||
|
|
||||||
|
if( boost::filesystem::exists(test_path) ) {
|
||||||
|
boost::filesystem::remove(test_path);
|
||||||
|
SimpleLogger().Write(logDEBUG) << "removing temporary files";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch ( const std::exception & e ) {
|
||||||
|
SimpleLogger().Write(logWARNING) << "caught exception: " << e.what();
|
||||||
|
SimpleLogger().Write(logWARNING) << "cleaning up, and exiting";
|
||||||
|
if(boost::filesystem::exists(test_path)) {
|
||||||
|
boost::filesystem::remove(test_path);
|
||||||
|
SimpleLogger().Write(logWARNING) << "removing temporary files";
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,24 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "../Library/OSRM.h"
|
#include "../Library/OSRM.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
|
|
||||||
@ -44,13 +50,30 @@ void print_tree(boost::property_tree::ptree const& pt, const unsigned recursion_
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main (int argc, char * argv[]) {
|
int main (int argc, const char * argv[]) {
|
||||||
LogPolicy::GetInstance().Unmute();
|
LogPolicy::GetInstance().Unmute();
|
||||||
try {
|
try {
|
||||||
std::cout << "\n starting up engines, compile at "
|
std::string ip_address;
|
||||||
<< __DATE__ << ", " __TIME__ << std::endl;
|
int ip_port, requested_num_threads;
|
||||||
IniFile serverConfig((argc > 1 ? argv[1] : "server.ini"));
|
|
||||||
OSRM routing_machine((argc > 1 ? argv[1] : "server.ini"));
|
ServerPaths server_paths;
|
||||||
|
if( !GenerateServerProgramOptions(
|
||||||
|
argc,
|
||||||
|
argv,
|
||||||
|
server_paths,
|
||||||
|
ip_address,
|
||||||
|
ip_port,
|
||||||
|
requested_num_threads
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleLogger().Write() <<
|
||||||
|
"starting up engines, " << g_GIT_DESCRIPTION << ", " <<
|
||||||
|
"compiled at " << __DATE__ << ", " __TIME__;
|
||||||
|
|
||||||
|
OSRM routing_machine(server_paths);
|
||||||
|
|
||||||
RouteParameters route_parameters;
|
RouteParameters route_parameters;
|
||||||
route_parameters.zoomLevel = 18; //no generalization
|
route_parameters.zoomLevel = 18; //no generalization
|
||||||
|
@ -1,25 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef AZIMUTH_H_
|
#ifndef AZIMUTH_H_
|
||||||
#define AZIMUTH_H_
|
#define AZIMUTH_H_
|
||||||
|
|
||||||
|
@ -1,8 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
* ContainerUtils.h
|
|
||||||
*
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
* Created on: 02.02.2013
|
All rights reserved.
|
||||||
* Author: dennis
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONTAINERUTILS_H_
|
#ifndef CONTAINERUTILS_H_
|
||||||
|
29
Util/GitDescription.cpp.in
Normal file
29
Util/GitDescription.cpp.in
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GIT_DESCRIPTION "${GIT_DESCRIPTION}"
|
||||||
|
char g_GIT_DESCRIPTION[] = GIT_DESCRIPTION;
|
28
Util/GitDescription.h
Normal file
28
Util/GitDescription.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern char g_GIT_DESCRIPTION[];
|
@ -1,21 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
open source routing machine
|
|
||||||
Copyright (C) Dennis Luxen, others 2010
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
it under the terms of the GNU AFFERO General Public License as published by
|
All rights reserved.
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
are permitted provided that the following conditions are met:
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef GRAPHLOADER_H
|
#ifndef GRAPHLOADER_H
|
||||||
@ -68,21 +75,21 @@ NodeID readBinaryOSRMGraphFromStream(
|
|||||||
|
|
||||||
if( !uuid_loaded.TestGraphUtil(uuid_orig) ) {
|
if( !uuid_loaded.TestGraphUtil(uuid_orig) ) {
|
||||||
SimpleLogger().Write(logWARNING) <<
|
SimpleLogger().Write(logWARNING) <<
|
||||||
".osrm was prepared with different build.\n"
|
".osrm was prepared with different build."
|
||||||
"Reprocess to get rid of this warning.";
|
"Reprocess to get rid of this warning.";
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeID n, source, target;
|
NodeID n, source, target;
|
||||||
EdgeID m;
|
EdgeID m;
|
||||||
short dir;// direction (0 = open, 1 = forward, 2+ = open)
|
short dir;// direction (0 = open, 1 = forward, 2+ = open)
|
||||||
ExternalNodeMap ext2IntNodeMap;
|
ExternalNodeMap ext_to_int_id_map;
|
||||||
in.read((char*)&n, sizeof(NodeID));
|
in.read((char*)&n, sizeof(NodeID));
|
||||||
SimpleLogger().Write() << "Importing n = " << n << " nodes ";
|
SimpleLogger().Write() << "Importing n = " << n << " nodes ";
|
||||||
_Node node;
|
_Node node;
|
||||||
for (NodeID i=0; i<n; ++i) {
|
for (NodeID i=0; i<n; ++i) {
|
||||||
in.read((char*)&node, sizeof(_Node));
|
in.read((char*)&node, sizeof(_Node));
|
||||||
int2ExtNodeMap->push_back(NodeInfo(node.lat, node.lon, node.id));
|
int2ExtNodeMap->push_back(NodeInfo(node.lat, node.lon, node.id));
|
||||||
ext2IntNodeMap.insert(std::make_pair(node.id, i));
|
ext_to_int_id_map.emplace(node.id, i);
|
||||||
if(node.bollard) {
|
if(node.bollard) {
|
||||||
bollardNodes.push_back(i);
|
bollardNodes.push_back(i);
|
||||||
}
|
}
|
||||||
@ -97,28 +104,29 @@ NodeID readBinaryOSRMGraphFromStream(
|
|||||||
|
|
||||||
in.read((char*)&m, sizeof(unsigned));
|
in.read((char*)&m, sizeof(unsigned));
|
||||||
SimpleLogger().Write() << " and " << m << " edges ";
|
SimpleLogger().Write() << " and " << m << " edges ";
|
||||||
for(unsigned i = 0; i < inputRestrictions.size(); ++i) {
|
// for(unsigned i = 0; i < inputRestrictions.size(); ++i) {
|
||||||
ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(inputRestrictions[i].fromNode);
|
BOOST_FOREACH(TurnRestriction & current_restriction, inputRestrictions) {
|
||||||
if( intNodeID == ext2IntNodeMap.end()) {
|
ExternalNodeMap::iterator intNodeID = ext_to_int_id_map.find(current_restriction.fromNode);
|
||||||
|
if( intNodeID == ext_to_int_id_map.end()) {
|
||||||
SimpleLogger().Write(logDEBUG) << "Unmapped from Node of restriction";
|
SimpleLogger().Write(logDEBUG) << "Unmapped from Node of restriction";
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
}
|
}
|
||||||
inputRestrictions[i].fromNode = intNodeID->second;
|
current_restriction.fromNode = intNodeID->second;
|
||||||
|
|
||||||
intNodeID = ext2IntNodeMap.find(inputRestrictions[i].viaNode);
|
intNodeID = ext_to_int_id_map.find(current_restriction.viaNode);
|
||||||
if( intNodeID == ext2IntNodeMap.end()) {
|
if( intNodeID == ext_to_int_id_map.end()) {
|
||||||
SimpleLogger().Write(logDEBUG) << "Unmapped via node of restriction";
|
SimpleLogger().Write(logDEBUG) << "Unmapped via node of restriction";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
inputRestrictions[i].viaNode = intNodeID->second;
|
current_restriction.viaNode = intNodeID->second;
|
||||||
|
|
||||||
intNodeID = ext2IntNodeMap.find(inputRestrictions[i].toNode);
|
intNodeID = ext_to_int_id_map.find(current_restriction.toNode);
|
||||||
if( intNodeID == ext2IntNodeMap.end()) {
|
if( intNodeID == ext_to_int_id_map.end()) {
|
||||||
SimpleLogger().Write(logDEBUG) << "Unmapped to node of restriction";
|
SimpleLogger().Write(logDEBUG) << "Unmapped to node of restriction";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
inputRestrictions[i].toNode = intNodeID->second;
|
current_restriction.toNode = intNodeID->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
edgeList.reserve(m);
|
edgeList.reserve(m);
|
||||||
@ -153,8 +161,8 @@ NodeID readBinaryOSRMGraphFromStream(
|
|||||||
assert(type >= 0);
|
assert(type >= 0);
|
||||||
|
|
||||||
// translate the external NodeIDs to internal IDs
|
// translate the external NodeIDs to internal IDs
|
||||||
ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(source);
|
ExternalNodeMap::iterator intNodeID = ext_to_int_id_map.find(source);
|
||||||
if( ext2IntNodeMap.find(source) == ext2IntNodeMap.end()) {
|
if( ext_to_int_id_map.find(source) == ext_to_int_id_map.end()) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
SimpleLogger().Write(logWARNING) <<
|
SimpleLogger().Write(logWARNING) <<
|
||||||
" unresolved source NodeID: " << source;
|
" unresolved source NodeID: " << source;
|
||||||
@ -162,8 +170,8 @@ NodeID readBinaryOSRMGraphFromStream(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
source = intNodeID->second;
|
source = intNodeID->second;
|
||||||
intNodeID = ext2IntNodeMap.find(target);
|
intNodeID = ext_to_int_id_map.find(target);
|
||||||
if(ext2IntNodeMap.find(target) == ext2IntNodeMap.end()) {
|
if(ext_to_int_id_map.find(target) == ext_to_int_id_map.end()) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
SimpleLogger().Write(logWARNING) <<
|
SimpleLogger().Write(logWARNING) <<
|
||||||
"unresolved target NodeID : " << target;
|
"unresolved target NodeID : " << target;
|
||||||
@ -215,7 +223,7 @@ NodeID readBinaryOSRMGraphFromStream(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
typename std::vector<EdgeT>::iterator newEnd = std::remove_if(edgeList.begin(), edgeList.end(), _ExcessRemover<EdgeT>());
|
typename std::vector<EdgeT>::iterator newEnd = std::remove_if(edgeList.begin(), edgeList.end(), _ExcessRemover<EdgeT>());
|
||||||
ext2IntNodeMap.clear();
|
ext_to_int_id_map.clear();
|
||||||
std::vector<EdgeT>(edgeList.begin(), newEnd).swap(edgeList); //remove excess candidates.
|
std::vector<EdgeT>(edgeList.begin(), newEnd).swap(edgeList); //remove excess candidates.
|
||||||
SimpleLogger().Write() << "Graph loaded ok and has " << edgeList.size() << " edges";
|
SimpleLogger().Write() << "Graph loaded ok and has " << edgeList.size() << " edges";
|
||||||
return n;
|
return n;
|
||||||
@ -225,13 +233,13 @@ NodeID readDTMPGraphFromStream(std::istream &in, std::vector<EdgeT>& edgeList, s
|
|||||||
NodeID n, source, target, id;
|
NodeID n, source, target, id;
|
||||||
EdgeID m;
|
EdgeID m;
|
||||||
int dir, xcoord, ycoord;// direction (0 = open, 1 = forward, 2+ = open)
|
int dir, xcoord, ycoord;// direction (0 = open, 1 = forward, 2+ = open)
|
||||||
ExternalNodeMap ext2IntNodeMap;
|
ExternalNodeMap ext_to_int_id_map;
|
||||||
in >> n;
|
in >> n;
|
||||||
SimpleLogger().Write(logDEBUG) << "Importing n = " << n << " nodes ";
|
SimpleLogger().Write(logDEBUG) << "Importing n = " << n << " nodes ";
|
||||||
for (NodeID i=0; i<n; ++i) {
|
for (NodeID i=0; i<n; ++i) {
|
||||||
in >> id >> ycoord >> xcoord;
|
in >> id >> ycoord >> xcoord;
|
||||||
int2ExtNodeMap->push_back(NodeInfo(xcoord, ycoord, id));
|
int2ExtNodeMap->push_back(NodeInfo(xcoord, ycoord, id));
|
||||||
ext2IntNodeMap.insert(std::make_pair(id, i));
|
ext_to_int_id_map.insert(std::make_pair(id, i));
|
||||||
}
|
}
|
||||||
in >> m;
|
in >> m;
|
||||||
SimpleLogger().Write(logDEBUG) << " and " << m << " edges";
|
SimpleLogger().Write(logDEBUG) << " and " << m << " edges";
|
||||||
@ -321,13 +329,13 @@ NodeID readDTMPGraphFromStream(std::istream &in, std::vector<EdgeT>& edgeList, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// translate the external NodeIDs to internal IDs
|
// translate the external NodeIDs to internal IDs
|
||||||
ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(source);
|
ExternalNodeMap::iterator intNodeID = ext_to_int_id_map.find(source);
|
||||||
if( ext2IntNodeMap.find(source) == ext2IntNodeMap.end()) {
|
if( ext_to_int_id_map.find(source) == ext_to_int_id_map.end()) {
|
||||||
throw OSRMException("unresolvable source Node ID");
|
throw OSRMException("unresolvable source Node ID");
|
||||||
}
|
}
|
||||||
source = intNodeID->second;
|
source = intNodeID->second;
|
||||||
intNodeID = ext2IntNodeMap.find(target);
|
intNodeID = ext_to_int_id_map.find(target);
|
||||||
if(ext2IntNodeMap.find(target) == ext2IntNodeMap.end()) {
|
if(ext_to_int_id_map.find(target) == ext_to_int_id_map.end()) {
|
||||||
throw OSRMException("unresolvable target Node ID");
|
throw OSRMException("unresolvable target Node ID");
|
||||||
}
|
}
|
||||||
target = intNodeID->second;
|
target = intNodeID->second;
|
||||||
@ -339,7 +347,7 @@ NodeID readDTMPGraphFromStream(std::istream &in, std::vector<EdgeT>& edgeList, s
|
|||||||
EdgeT inputEdge(source, target, 0, weight, forward, backward, type );
|
EdgeT inputEdge(source, target, 0, weight, forward, backward, type );
|
||||||
edgeList.push_back(inputEdge);
|
edgeList.push_back(inputEdge);
|
||||||
}
|
}
|
||||||
ext2IntNodeMap.clear();
|
ext_to_int_id_map.clear();
|
||||||
std::vector<EdgeT>(edgeList.begin(), edgeList.end()).swap(edgeList); //remove excess candidates.
|
std::vector<EdgeT>(edgeList.begin(), edgeList.end()).swap(edgeList); //remove excess candidates.
|
||||||
std::cout << "ok" << std::endl;
|
std::cout << "ok" << std::endl;
|
||||||
return n;
|
return n;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user