Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "osrm/match_parameters.hpp"
- #include "osrm/nearest_parameters.hpp"
- #include "osrm/route_parameters.hpp"
- #include "osrm/table_parameters.hpp"
- #include "osrm/trip_parameters.hpp"
- #include "osrm/coordinate.hpp"
- #include "osrm/engine_config.hpp"
- #include "osrm/json_container.hpp"
- #include "osrm/osrm.hpp"
- #include "osrm/status.hpp"
- #include <exception>
- #include <iostream>
- #include <string>
- #include <utility>
- #include <cstdlib>
- int main(int argc, const char *argv[])
- {
- if (argc < 2)
- {
- std::cerr << "Usage: " << argv[0] << " data.osrmn";
- return EXIT_FAILURE;
- }
- using namespace osrm;
- // Configure based on a .osrm base path, and no datasets in shared mem from osrm-datastore
- EngineConfig config;
- config.storage_config = {argv[1]};
- config.use_shared_memory = false;
- // We support two routing speed up techniques:
- // - Contraction Hierarchies (CH): requires extract+contract pre-processing
- // - Multi-Level Dijkstra (MLD): requires extract+partition+customize pre-processing
- //
- // config.algorithm = EngineConfig::Algorithm::CH;
- config.algorithm = EngineConfig::Algorithm::MLD;
- // Routing machine with several services (such as Route, Table, Nearest, Trip, Match)
- const OSRM osrm{config};
- // The following shows how to use the Route service; configure this service
- RouteParameters params;
- // Route in monaco 13.388860,52.517037;13.385983,52.496891
- params.coordinates.push_back({util::FloatLongitude{13.385983}, util::FloatLatitude{52.496891}});
- params.coordinates.push_back({util::FloatLongitude{13.388860}, util::FloatLatitude{52.517037}});
- // Response is in JSON format
- json::Object result;
- // Execute routing request, this does the heavy lifting
- // for loop execution
- for( int a = 0; a < 20000; a = a + 1 ) {
- const auto status = osrm.Route(params, result);
- if (status == Status::Ok)
- {
- auto &routes = result.values["routes"].get<json::Array>();
- // Let's just use the first route
- auto &route = routes.values.at(0).get<json::Object>();
- const auto distance = route.values["distance"].get<json::Number>().value;
- const auto duration = route.values["duration"].get<json::Number>().value;
- // Warn users if extract does not contain the default coordinates from above
- if (distance == 0 || duration == 0)
- {
- std::cout << "Note: distance or duration is zero. ";
- std::cout << "You are probably doing a query outside of the OSM extract.nn";
- }
- std::cout << "Distance: " << distance << " meter " << a << "n";
- std::cout << "Duration: " << duration << " secondsn";
- if(a==19999){return EXIT_SUCCESS;}
- }
- else if (status == Status::Error)
- {
- const auto code = result.values["code"].get<json::String>().value;
- const auto message = result.values["message"].get<json::String>().value;
- std::cout << "Code: " << code << "n";
- std::cout << "Message: " << code << "n";
- if(a==19999){return EXIT_FAILURE;}
- }
- }
- }
Add Comment
Please, Sign In to add comment