2016-05-27 15:05:04 -04:00
|
|
|
#include "osrm/match_parameters.hpp"
|
|
|
|
#include "osrm/nearest_parameters.hpp"
|
2016-01-07 13:19:55 -05:00
|
|
|
#include "osrm/route_parameters.hpp"
|
2016-02-18 16:57:22 -05:00
|
|
|
#include "osrm/table_parameters.hpp"
|
|
|
|
#include "osrm/trip_parameters.hpp"
|
|
|
|
|
|
|
|
#include "osrm/coordinate.hpp"
|
|
|
|
#include "osrm/engine_config.hpp"
|
|
|
|
#include "osrm/json_container.hpp"
|
|
|
|
|
2016-01-07 13:19:55 -05:00
|
|
|
#include "osrm/osrm.hpp"
|
2016-05-27 15:05:04 -04:00
|
|
|
#include "osrm/status.hpp"
|
2016-01-07 13:19:55 -05:00
|
|
|
|
2016-05-27 15:05:04 -04:00
|
|
|
#include <exception>
|
|
|
|
#include <iostream>
|
2016-01-07 13:19:55 -05:00
|
|
|
#include <string>
|
|
|
|
#include <utility>
|
2016-02-18 20:03:19 -05:00
|
|
|
|
2016-01-07 13:19:55 -05:00
|
|
|
#include <cstdlib>
|
|
|
|
|
2016-07-19 07:13:52 -04:00
|
|
|
int main(int argc, const char *argv[])
|
2016-01-07 13:19:55 -05:00
|
|
|
{
|
|
|
|
if (argc < 2)
|
|
|
|
{
|
2016-02-18 20:03:19 -05:00
|
|
|
std::cerr << "Usage: " << argv[0] << " data.osrm\n";
|
2016-01-07 13:19:55 -05:00
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
2016-03-02 20:55:30 -05:00
|
|
|
using namespace osrm;
|
|
|
|
|
|
|
|
// Configure based on a .osrm base path, and no datasets in shared mem from osrm-datastore
|
2016-03-22 14:30:18 -04:00
|
|
|
EngineConfig config;
|
2017-11-24 05:40:28 -05:00
|
|
|
|
2017-07-07 10:42:07 -04:00
|
|
|
config.storage_config = {argv[1]};
|
2016-02-18 20:03:19 -05:00
|
|
|
config.use_shared_memory = false;
|
|
|
|
|
2017-11-24 05:40:28 -05:00
|
|
|
// 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;
|
|
|
|
|
2016-02-18 20:03:19 -05:00
|
|
|
// Routing machine with several services (such as Route, Table, Nearest, Trip, Match)
|
2016-09-06 09:41:43 -04:00
|
|
|
const OSRM osrm{config};
|
2016-02-18 20:03:19 -05:00
|
|
|
|
|
|
|
// The following shows how to use the Route service; configure this service
|
2016-03-02 20:55:30 -05:00
|
|
|
RouteParameters params;
|
2016-02-18 20:03:19 -05:00
|
|
|
|
2017-03-21 06:49:29 -04:00
|
|
|
// Route in monaco
|
|
|
|
params.coordinates.push_back({util::FloatLongitude{7.419758}, util::FloatLatitude{43.731142}});
|
|
|
|
params.coordinates.push_back({util::FloatLongitude{7.419505}, util::FloatLatitude{43.736825}});
|
2016-02-18 20:03:19 -05:00
|
|
|
|
|
|
|
// Response is in JSON format
|
2019-08-14 08:58:21 -04:00
|
|
|
engine::api::ResultT result = json::Object();
|
2016-02-18 20:03:19 -05:00
|
|
|
|
|
|
|
// Execute routing request, this does the heavy lifting
|
|
|
|
const auto status = osrm.Route(params, result);
|
|
|
|
|
2024-05-28 12:52:49 -04:00
|
|
|
auto &json_result = std::get<json::Object>(result);
|
2016-03-02 20:55:30 -05:00
|
|
|
if (status == Status::Ok)
|
2016-02-18 20:03:19 -05:00
|
|
|
{
|
2024-05-28 12:52:49 -04:00
|
|
|
auto &routes = std::get<json::Array>(json_result.values["routes"]);
|
2016-02-18 20:03:19 -05:00
|
|
|
|
|
|
|
// Let's just use the first route
|
2024-05-28 12:52:49 -04:00
|
|
|
auto &route = std::get<json::Object>(routes.values.at(0));
|
|
|
|
const auto distance = std::get<json::Number>(route.values["distance"]).value;
|
|
|
|
const auto duration = std::get<json::Number>(route.values["duration"]).value;
|
2016-02-18 20:03:19 -05:00
|
|
|
|
2017-03-21 06:49:29 -04:00
|
|
|
// Warn users if extract does not contain the default coordinates from above
|
2017-03-01 12:27:57 -05:00
|
|
|
if (distance == 0 || duration == 0)
|
2016-02-18 20:03:19 -05:00
|
|
|
{
|
|
|
|
std::cout << "Note: distance or duration is zero. ";
|
|
|
|
std::cout << "You are probably doing a query outside of the OSM extract.\n\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
std::cout << "Distance: " << distance << " meter\n";
|
|
|
|
std::cout << "Duration: " << duration << " seconds\n";
|
2016-07-27 19:31:57 -04:00
|
|
|
return EXIT_SUCCESS;
|
2016-02-18 20:03:19 -05:00
|
|
|
}
|
2016-03-02 20:55:30 -05:00
|
|
|
else if (status == Status::Error)
|
2016-01-07 13:19:55 -05:00
|
|
|
{
|
2024-05-28 12:52:49 -04:00
|
|
|
const auto code = std::get<json::String>(json_result.values["code"]).value;
|
|
|
|
const auto message = std::get<json::String>(json_result.values["message"]).value;
|
2016-02-18 20:03:19 -05:00
|
|
|
|
|
|
|
std::cout << "Code: " << code << "\n";
|
|
|
|
std::cout << "Message: " << code << "\n";
|
|
|
|
return EXIT_FAILURE;
|
2016-01-07 13:19:55 -05:00
|
|
|
}
|
|
|
|
}
|