Merge PR #970 'experimental/cuke_import_format' into develop
This commit is contained in:
commit
0ef7a72b33
@ -41,9 +41,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <boost/ref.hpp>
|
#include <boost/ref.hpp>
|
||||||
|
|
||||||
XMLParser::XMLParser(const char * filename, ExtractorCallbacks* ec, ScriptingEnvironment& se) : BaseParser(ec, se) {
|
XMLParser::XMLParser(const char * filename, ExtractorCallbacks* ec, ScriptingEnvironment& se) : BaseParser(ec, se) {
|
||||||
SimpleLogger().Write(logWARNING) <<
|
|
||||||
"Parsing plain .osm/.osm.bz2 is deprecated. Switch to .pbf";
|
|
||||||
|
|
||||||
inputReader = inputReaderFactory(filename);
|
inputReader = inputReaderFactory(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,6 +193,11 @@ int main (int argc, char *argv[]) {
|
|||||||
(get_timestamp() - parsing_start_time) <<
|
(get_timestamp() - parsing_start_time) <<
|
||||||
" seconds";
|
" seconds";
|
||||||
|
|
||||||
|
if( externalMemory.all_edges_list.empty() ) {
|
||||||
|
SimpleLogger().Write(logWARNING) << "The input data is empty, exiting.";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
externalMemory.PrepareData(output_file_name, restrictionsFileName);
|
externalMemory.PrepareData(output_file_name, restrictionsFileName);
|
||||||
|
|
||||||
delete parser;
|
delete parser;
|
||||||
|
@ -2,6 +2,10 @@ Given /^the profile "([^"]*)"$/ do |profile|
|
|||||||
set_profile profile
|
set_profile profile
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Given(/^the import format "(.*?)"$/) do |format|
|
||||||
|
set_input_format format
|
||||||
|
end
|
||||||
|
|
||||||
Given /^a grid size of (\d+) meters$/ do |meters|
|
Given /^a grid size of (\d+) meters$/ do |meters|
|
||||||
set_grid_size meters
|
set_grid_size meters
|
||||||
end
|
end
|
||||||
|
@ -13,7 +13,7 @@ WAY_SPACING = 100
|
|||||||
DEFAULT_GRID_SIZE = 100 #meters
|
DEFAULT_GRID_SIZE = 100 #meters
|
||||||
PROFILES_PATH = '../profiles'
|
PROFILES_PATH = '../profiles'
|
||||||
BIN_PATH = '../build'
|
BIN_PATH = '../build'
|
||||||
|
DEFAULT_INPUT_FORMAT = 'osm'
|
||||||
DEFAULT_ORIGIN = [1,1]
|
DEFAULT_ORIGIN = [1,1]
|
||||||
|
|
||||||
class Location
|
class Location
|
||||||
@ -25,6 +25,15 @@ class Location
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_input_format format
|
||||||
|
raise '*** Input format must be eiter "osm" or "pbf"' unless ['pbf','osm'].include? format.to_s
|
||||||
|
@input_format = format.to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
def input_format
|
||||||
|
@input_format || DEFAULT_INPUT_FORMAT
|
||||||
|
end
|
||||||
|
|
||||||
def sanitized_scenario_title
|
def sanitized_scenario_title
|
||||||
@sanitized_scenario_title ||= @scenario_title.gsub /[^0-9A-Za-z.\-]/, '_'
|
@sanitized_scenario_title ||= @scenario_title.gsub /[^0-9A-Za-z.\-]/, '_'
|
||||||
end
|
end
|
||||||
@ -244,8 +253,8 @@ def write_timestamp
|
|||||||
end
|
end
|
||||||
|
|
||||||
def reprocess
|
def reprocess
|
||||||
use_pbf = true
|
|
||||||
Dir.chdir TEST_FOLDER do
|
Dir.chdir TEST_FOLDER do
|
||||||
|
use_pbf = (input_format=='pbf')
|
||||||
write_osm
|
write_osm
|
||||||
write_timestamp
|
write_timestamp
|
||||||
convert_osm_to_pbf if use_pbf
|
convert_osm_to_pbf if use_pbf
|
||||||
|
156
features/testbot/protobuffer.feature
Normal file
156
features/testbot/protobuffer.feature
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
@routing @pbf
|
||||||
|
Feature: Importing protobuffer (.pbf) format
|
||||||
|
# Test normally read .osm, which is faster than .pbf files,
|
||||||
|
# since we don't need to use osmosis to first convert to .pbf
|
||||||
|
# The scenarios in this file test the ability to import .pbf files,
|
||||||
|
# including nodes, way, restictions, and a various special situations.
|
||||||
|
|
||||||
|
Background:
|
||||||
|
Given the profile "testbot"
|
||||||
|
And the import format "pbf"
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, nodes and ways
|
||||||
|
Given the node map
|
||||||
|
| | | | d |
|
||||||
|
| a | b | c | |
|
||||||
|
| | | | e |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | oneway |
|
||||||
|
| abc | primary | |
|
||||||
|
| cd | primary | yes |
|
||||||
|
| ce | river | |
|
||||||
|
| de | primary | |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route |
|
||||||
|
| d | c | de,ce |
|
||||||
|
| e | d | de |
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, turn restiction relations
|
||||||
|
Given the node map
|
||||||
|
| | n | |
|
||||||
|
| w | j | e |
|
||||||
|
| | s | |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | oneway |
|
||||||
|
| sj | yes |
|
||||||
|
| nj | -1 |
|
||||||
|
| wj | -1 |
|
||||||
|
| ej | -1 |
|
||||||
|
|
||||||
|
And the relations
|
||||||
|
| type | way:from | way:to | node:via | restriction |
|
||||||
|
| restriction | sj | wj | j | no_left_turn |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route |
|
||||||
|
| s | w | |
|
||||||
|
| s | n | sj,nj |
|
||||||
|
| s | e | sj,ej |
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, distances at longitude 45
|
||||||
|
Given the node locations
|
||||||
|
| node | lat | lon |
|
||||||
|
| a | 80 | 45 |
|
||||||
|
| b | 0 | 45 |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| ab |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | distance |
|
||||||
|
| a | b | ab | 8905559m ~0.1% |
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, distances at longitude 80
|
||||||
|
Given the node locations
|
||||||
|
| node | lat | lon |
|
||||||
|
| a | 80 | 80 |
|
||||||
|
| b | 0 | 80 |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| ab |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | distance |
|
||||||
|
| a | b | ab | 8905559m ~0.1% |
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, empty dataset
|
||||||
|
Given the node map
|
||||||
|
| |
|
||||||
|
|
||||||
|
Given the ways
|
||||||
|
| nodes |
|
||||||
|
|
||||||
|
When I preprocess data
|
||||||
|
Then "osrm-extract" should return code 255
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, streetnames with UTF characters
|
||||||
|
Given the node map
|
||||||
|
| a | b | c | d |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | name |
|
||||||
|
| ab | Scandinavian København |
|
||||||
|
| bc | Japanese 東京 |
|
||||||
|
| cd | Cyrillic Москва |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route |
|
||||||
|
| a | b | Scandinavian København |
|
||||||
|
| b | c | Japanese 東京 |
|
||||||
|
| c | d | Cyrillic Москва |
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, bearing af 45 degree intervals
|
||||||
|
Given the node map
|
||||||
|
| b | a | h |
|
||||||
|
| c | x | g |
|
||||||
|
| d | e | f |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| xa |
|
||||||
|
| xb |
|
||||||
|
| xc |
|
||||||
|
| xd |
|
||||||
|
| xe |
|
||||||
|
| xf |
|
||||||
|
| xg |
|
||||||
|
| xh |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | compass | bearing |
|
||||||
|
| x | a | xa | N | 0 |
|
||||||
|
| x | b | xb | NW | 315 |
|
||||||
|
| x | c | xc | W | 270 |
|
||||||
|
| x | d | xd | SW | 225 |
|
||||||
|
| x | e | xe | S | 180 |
|
||||||
|
| x | f | xf | SE | 135 |
|
||||||
|
| x | g | xg | E | 90 |
|
||||||
|
| x | h | xh | NE | 45 |
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Testbot - Protobuffer import, rraffic signals should incur a delay
|
||||||
|
Given the node map
|
||||||
|
| a | b | c |
|
||||||
|
| d | e | f |
|
||||||
|
|
||||||
|
And the nodes
|
||||||
|
| node | highway |
|
||||||
|
| e | traffic_signals |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| abc |
|
||||||
|
| def |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | time | distance |
|
||||||
|
| a | c | abc | 20s +-1 | 200m +-1 |
|
||||||
|
| d | f | def | 27s +-1 | 200m +-1 |
|
12
prepare.cpp
12
prepare.cpp
@ -236,17 +236,17 @@ int main (int argc, char *argv[]) {
|
|||||||
std::vector<ImportEdge> edgeList;
|
std::vector<ImportEdge> edgeList;
|
||||||
NodeID nodeBasedNodeNumber = readBinaryOSRMGraphFromStream(in, edgeList, bollardNodes, trafficLightNodes, &internalToExternalNodeMapping, inputRestrictions);
|
NodeID nodeBasedNodeNumber = readBinaryOSRMGraphFromStream(in, edgeList, bollardNodes, trafficLightNodes, &internalToExternalNodeMapping, inputRestrictions);
|
||||||
in.close();
|
in.close();
|
||||||
|
|
||||||
|
if( edgeList.empty() ) {
|
||||||
|
SimpleLogger().Write(logWARNING) << "The input data is empty, exiting.";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
SimpleLogger().Write() <<
|
SimpleLogger().Write() <<
|
||||||
inputRestrictions.size() << " restrictions, " <<
|
inputRestrictions.size() << " restrictions, " <<
|
||||||
bollardNodes.size() << " bollard nodes, " <<
|
bollardNodes.size() << " bollard nodes, " <<
|
||||||
trafficLightNodes.size() << " traffic lights";
|
trafficLightNodes.size() << " traffic lights";
|
||||||
|
|
||||||
if( edgeList.empty() ) {
|
|
||||||
SimpleLogger().Write(logWARNING) << "The input data is broken. "
|
|
||||||
"It is impossible to do any turns in this graph";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Building an edge-expanded graph from node-based input an turn restrictions
|
* Building an edge-expanded graph from node-based input an turn restrictions
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user