Complete removal of speedprofile.ini and further adaption of
profile.lua
This commit is contained in:
parent
eac900c6b8
commit
3e0b4ee1e5
@ -18,19 +18,10 @@
|
|||||||
or see http://www.gnu.org/licenses/agpl.txt.
|
or see http://www.gnu.org/licenses/agpl.txt.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <queue>
|
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/lexical_cast.hpp>
|
|
||||||
#include <boost/property_tree/ptree.hpp>
|
|
||||||
#include <boost/property_tree/ini_parser.hpp>
|
|
||||||
|
|
||||||
#include "../Util/OpenMPWrapper.h"
|
|
||||||
#include "../DataStructures/Percent.h"
|
|
||||||
#include "EdgeBasedGraphFactory.h"
|
#include "EdgeBasedGraphFactory.h"
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
EdgeBasedGraphFactory::EdgeBasedGraphFactory(int nodes, std::vector<NodeBasedEdge> & inputEdges, std::vector<NodeID> & bn, std::vector<NodeID> & tl, std::vector<_Restriction> & irs, std::vector<NodeInfo> & nI, boost::property_tree::ptree speedProfile, std::string & srtm) : inputNodeInfoList(nI), numberOfTurnRestrictions(irs.size()), trafficSignalPenalty(0), uturnPenalty(0), takeMinimumOfSpeeds(false) {
|
EdgeBasedGraphFactory::EdgeBasedGraphFactory(int nodes, std::vector<NodeBasedEdge> & inputEdges, std::vector<NodeID> & bn, std::vector<NodeID> & tl, std::vector<_Restriction> & irs, std::vector<NodeInfo> & nI, SpeedProfileProperties sp, std::string & srtm) : inputNodeInfoList(nI), numberOfTurnRestrictions(irs.size()), speedProfile(sp) {
|
||||||
BOOST_FOREACH(_Restriction & restriction, irs) {
|
BOOST_FOREACH(_Restriction & restriction, irs) {
|
||||||
std::pair<NodeID, NodeID> restrictionSource = std::make_pair(restriction.fromNode, restriction.viaNode);
|
std::pair<NodeID, NodeID> restrictionSource = std::make_pair(restriction.fromNode, restriction.viaNode);
|
||||||
unsigned index;
|
unsigned index;
|
||||||
@ -53,32 +44,6 @@ EdgeBasedGraphFactory::EdgeBasedGraphFactory(int nodes, std::vector<NodeBasedEdg
|
|||||||
_restrictionBucketVector.at(index).push_back(std::make_pair(restriction.toNode, restriction.flags.isOnly));
|
_restrictionBucketVector.at(index).push_back(std::make_pair(restriction.toNode, restriction.flags.isOnly));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string usedSpeedProfile( speedProfile.get_child("").begin()->first );
|
|
||||||
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, speedProfile.get_child(usedSpeedProfile)) {
|
|
||||||
if("trafficSignalPenalty" == v.first) {
|
|
||||||
std::string value = v.second.get<std::string>("");
|
|
||||||
try {
|
|
||||||
trafficSignalPenalty = 10*boost::lexical_cast<int>(v.second.get<std::string>(""));
|
|
||||||
} catch(boost::bad_lexical_cast &) {
|
|
||||||
trafficSignalPenalty = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if("uturnPenalty" == v.first) {
|
|
||||||
std::string value = v.second.get<std::string>("");
|
|
||||||
try {
|
|
||||||
uturnPenalty = 10*boost::lexical_cast<int>(v.second.get<std::string>(""));
|
|
||||||
} catch(boost::bad_lexical_cast &) {
|
|
||||||
uturnPenalty = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if("takeMinimumOfSpeeds" == v.first) {
|
|
||||||
std::string value = v.second.get<std::string>("");
|
|
||||||
takeMinimumOfSpeeds = (v.second.get<std::string>("") == "yes");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// INFO("traffic signal penalty: " << trafficSignalPenalty << ", U-Turn penalty: " << uturnPenalty << ", takeMinimumOfSpeeds=" << (takeMinimumOfSpeeds ? "yes" : "no"));
|
|
||||||
|
|
||||||
BOOST_FOREACH(NodeID id, bn) {
|
BOOST_FOREACH(NodeID id, bn) {
|
||||||
_barrierNodes[id] = true;
|
_barrierNodes[id] = true;
|
||||||
}
|
}
|
||||||
@ -308,11 +273,11 @@ void EdgeBasedGraphFactory::Run(const char * originalEdgeDataFilename) {
|
|||||||
|
|
||||||
unsigned distance = edgeData1.distance;
|
unsigned distance = edgeData1.distance;
|
||||||
if(_trafficLights.find(v) != _trafficLights.end()) {
|
if(_trafficLights.find(v) != _trafficLights.end()) {
|
||||||
distance += trafficSignalPenalty;
|
distance += speedProfile.trafficSignalPenalty;
|
||||||
}
|
}
|
||||||
short turnInstruction = AnalyzeTurn(u, v, w);
|
short turnInstruction = AnalyzeTurn(u, v, w);
|
||||||
if(turnInstruction == TurnInstructions.UTurn)
|
if(turnInstruction == TurnInstructions.UTurn)
|
||||||
distance += uturnPenalty;
|
distance += speedProfile.uTurnPenalty;
|
||||||
// if(!edgeData1.isAccessRestricted && edgeData2.isAccessRestricted) {
|
// if(!edgeData1.isAccessRestricted && edgeData2.isAccessRestricted) {
|
||||||
// distance += TurnInstructions.AccessRestrictionPenalty;
|
// distance += TurnInstructions.AccessRestrictionPenalty;
|
||||||
// turnInstruction |= TurnInstructions.AccessRestrictionFlag;
|
// turnInstruction |= TurnInstructions.AccessRestrictionFlag;
|
||||||
|
@ -25,14 +25,17 @@
|
|||||||
#ifndef EDGEBASEDGRAPHFACTORY_H_
|
#ifndef EDGEBASEDGRAPHFACTORY_H_
|
||||||
#define EDGEBASEDGRAPHFACTORY_H_
|
#define EDGEBASEDGRAPHFACTORY_H_
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <algorithm>
|
||||||
#include <boost/property_tree/ptree.hpp>
|
#include <queue>
|
||||||
#include <boost/property_tree/ini_parser.hpp>
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <stxxl.h>
|
#include <stxxl.h>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
#include "../DataStructures/DeallocatingVector.h"
|
#include "../DataStructures/DeallocatingVector.h"
|
||||||
#include "../DataStructures/DynamicGraph.h"
|
#include "../DataStructures/DynamicGraph.h"
|
||||||
@ -92,6 +95,12 @@ public:
|
|||||||
bool ignoreInGrid:1;
|
bool ignoreInGrid:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct SpeedProfileProperties{
|
||||||
|
SpeedProfileProperties() : trafficSignalPenalty(0), uTurnPenalty(0) {}
|
||||||
|
int trafficSignalPenalty;
|
||||||
|
int uTurnPenalty;
|
||||||
|
} speedProfile;
|
||||||
private:
|
private:
|
||||||
boost::shared_ptr<_NodeBasedDynamicGraph> _nodeBasedGraph;
|
boost::shared_ptr<_NodeBasedDynamicGraph> _nodeBasedGraph;
|
||||||
boost::unordered_map<NodeID, bool> _barrierNodes;
|
boost::unordered_map<NodeID, bool> _barrierNodes;
|
||||||
@ -121,13 +130,10 @@ private:
|
|||||||
double GetAngleBetweenTwoEdges(const CoordinateT& A, const CoordinateT& C, const CoordinateT& B) const;
|
double GetAngleBetweenTwoEdges(const CoordinateT& A, const CoordinateT& C, const CoordinateT& B) const;
|
||||||
// SRTMLookup srtmLookup;
|
// SRTMLookup srtmLookup;
|
||||||
unsigned numberOfTurnRestrictions;
|
unsigned numberOfTurnRestrictions;
|
||||||
unsigned trafficSignalPenalty;
|
|
||||||
unsigned uturnPenalty;
|
|
||||||
bool takeMinimumOfSpeeds;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
template< class InputEdgeT >
|
template< class InputEdgeT >
|
||||||
explicit EdgeBasedGraphFactory(int nodes, std::vector<InputEdgeT> & inputEdges, std::vector<NodeID> & _bollardNodes, std::vector<NodeID> & trafficLights, std::vector<_Restriction> & inputRestrictions, std::vector<NodeInfo> & nI, boost::property_tree::ptree speedProfile, std::string & srtm);
|
explicit EdgeBasedGraphFactory(int nodes, std::vector<InputEdgeT> & inputEdges, std::vector<NodeID> & _bollardNodes, std::vector<NodeID> & trafficLights, std::vector<_Restriction> & inputRestrictions, std::vector<NodeInfo> & nI, SpeedProfileProperties speedProfile, std::string & srtm);
|
||||||
|
|
||||||
void Run(const char * originalEdgeDataFilename);
|
void Run(const char * originalEdgeDataFilename);
|
||||||
void GetEdgeBasedEdges( DeallocatingVector< EdgeBasedEdge >& edges );
|
void GetEdgeBasedEdges( DeallocatingVector< EdgeBasedEdge >& edges );
|
||||||
|
27
profile.lua
27
profile.lua
@ -29,8 +29,13 @@ speed_profile = {
|
|||||||
["default"] = 50
|
["default"] = 50
|
||||||
}
|
}
|
||||||
|
|
||||||
take_minimum_of_speeds = true
|
take_minimum_of_speeds = true
|
||||||
obey_oneway = true
|
obey_oneway = true
|
||||||
|
obey_bollards = true
|
||||||
|
use_restrictions = true
|
||||||
|
ignore_areas = true -- future feature
|
||||||
|
traffic_signal_penalty = 2
|
||||||
|
u_turn_penalty = 20
|
||||||
|
|
||||||
-- End of globals
|
-- End of globals
|
||||||
|
|
||||||
@ -45,14 +50,16 @@ function node_function (node)
|
|||||||
node.traffic_light = true;
|
node.traffic_light = true;
|
||||||
end
|
end
|
||||||
|
|
||||||
--flag node as unpassable if it black listed as unpassable
|
if obey_bollards then
|
||||||
if access_tag_blacklist[barrier] then
|
--flag node as unpassable if it black listed as unpassable
|
||||||
node.bollard = true;
|
if access_tag_blacklist[barrier] then
|
||||||
end
|
node.bollard = true;
|
||||||
|
end
|
||||||
|
|
||||||
--reverse the previous flag if there is an access tag specifying entrance
|
--reverse the previous flag if there is an access tag specifying entrance
|
||||||
if node.bollard and not bollards_whitelist[barrier] and not access_tag_whitelist[barrier] then
|
if node.bollard and not bollards_whitelist[barrier] and not access_tag_whitelist[barrier] then
|
||||||
node.bollard = false;
|
node.bollard = false;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
@ -82,7 +89,7 @@ function way_function (way, numberOfNodesInWay)
|
|||||||
|
|
||||||
-- Second parse the way according to these properties
|
-- Second parse the way according to these properties
|
||||||
|
|
||||||
if("yes" == area) then
|
if ignore_areas and ("yes" == area) then
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
[car]
|
|
||||||
motorway = 90
|
|
||||||
motorway_link = 75
|
|
||||||
trunk = 85
|
|
||||||
trunk_link = 70
|
|
||||||
primary = 65
|
|
||||||
primary_link = 60
|
|
||||||
secondary = 55
|
|
||||||
secondary_link = 50
|
|
||||||
tertiary = 40
|
|
||||||
tertiary_link = 30
|
|
||||||
unclassified = 25
|
|
||||||
residential = 25
|
|
||||||
living_street = 10
|
|
||||||
service = 15
|
|
||||||
track = 5
|
|
||||||
ferry = 5
|
|
||||||
pier = 5
|
|
||||||
obeyBollards = yes
|
|
||||||
obeyOneways = yes
|
|
||||||
useRestrictions = yes
|
|
||||||
ignoreAreas = yes
|
|
||||||
accessTags = motorcar,motor_vehicle,vehicle,access
|
|
||||||
excludeFromGrid = ferry
|
|
||||||
defaultSpeed = 50
|
|
||||||
trafficSignalPenalty = 2
|
|
||||||
takeMinimumOfSpeeds = no
|
|
||||||
uturnPenalty = 20
|
|
||||||
accessRestrictedService = parking_aisle
|
|
||||||
accessRestrictionKeys = destination,private,delivery,permissive
|
|
||||||
accessForbiddenKeys = no,private,agricultural,forestery
|
|
||||||
accessForbiddenDefault = track
|
|
||||||
[bike]
|
|
||||||
trunk = 16
|
|
||||||
trunk_link = 16
|
|
||||||
primary = 16
|
|
||||||
primary_link = 16
|
|
||||||
secondary = 16
|
|
||||||
secondary_link = 16
|
|
||||||
tertiary = 16
|
|
||||||
tertiary_link = 16
|
|
||||||
unclassified = 16
|
|
||||||
residential = 16
|
|
||||||
living_street = 16
|
|
||||||
service = 16
|
|
||||||
track = 16
|
|
||||||
cycleway = 16
|
|
||||||
path = 16
|
|
||||||
ferry = 5
|
|
||||||
pier = 5
|
|
||||||
obeyOneways = yes
|
|
||||||
useRestrictions = no
|
|
||||||
accessTags = bicycle,vehicle,access
|
|
||||||
excludeFromGrid = ferry
|
|
||||||
defaultSpeed = 5
|
|
||||||
trafficSignalPenalty = 5
|
|
||||||
obeyBollards = no
|
|
||||||
takeMinimumOfSpeeds = yes
|
|
||||||
uturnPenalty = 20
|
|
||||||
accessRestrictionKeys = destination,private,delivery
|
|
||||||
accessForbiddenKeys = no,private,agricultural,forestery
|
|
Loading…
Reference in New Issue
Block a user