From a0e9f59e041191ae9454f88f9c88cbfec3706f48 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 27 Jun 2013 13:21:33 -0400 Subject: [PATCH] Adding a simple example on how to call the lib --- CMakeLists.txt | 3 ++ DataStructures/Coordinate.h | 3 +- Plugins/TimestampPlugin.h | 4 -- simpleclient.cpp | 89 +++++++++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 simpleclient.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d24f7a894..857ea0725 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,9 @@ target_link_libraries( osrm-extract ${Boost_LIBRARIES} ) target_link_libraries( osrm-prepare ${Boost_LIBRARIES} ) target_link_libraries( osrm-routed ${Boost_LIBRARIES} OSRM) +add_executable ( osrm-cli simpleclient.cpp) +target_link_libraries( osrm-cli ${Boost_LIBRARIES} OSRM) + find_package ( BZip2 REQUIRED ) include_directories(${BZIP_INCLUDE_DIRS}) target_link_libraries (osrm-extract ${BZIP2_LIBRARIES}) diff --git a/DataStructures/Coordinate.h b/DataStructures/Coordinate.h index 11ae3069e..68219d5a1 100644 --- a/DataStructures/Coordinate.h +++ b/DataStructures/Coordinate.h @@ -33,7 +33,8 @@ struct _Coordinate { int lat; int lon; _Coordinate () : lat(INT_MIN), lon(INT_MIN) {} - _Coordinate (int t, int n) : lat(t) , lon(n) {} + explicit _Coordinate (int t, int n) : lat(t) , lon(n) {} + void Reset() { lat = INT_MIN; lon = INT_MIN; diff --git a/Plugins/TimestampPlugin.h b/Plugins/TimestampPlugin.h index 0475a04fd..6a245e116 100644 --- a/Plugins/TimestampPlugin.h +++ b/Plugins/TimestampPlugin.h @@ -30,13 +30,9 @@ class TimestampPlugin : public BasePlugin { public: TimestampPlugin(QueryObjectsStorage * o) : objects(o) { } - ~TimestampPlugin() { - std::cout << "shutdown time stamp" << std::endl; - } std::string GetDescriptor() const { return std::string("timestamp"); } std::string GetVersionString() const { return std::string("0.3 (DL)"); } void HandleRequest(const RouteParameters & routeParameters, http::Reply& reply) { - std::cout << "handling request" << std::endl; std::string tmp; //json diff --git a/simpleclient.cpp b/simpleclient.cpp new file mode 100644 index 000000000..17eedffa7 --- /dev/null +++ b/simpleclient.cpp @@ -0,0 +1,89 @@ +/* + open source routing machine + Copyright (C) Dennis Luxen, 2010 + +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 +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 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, 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 "Plugins/RouteParameters.h" +#include "Server/BasicDatastructures.h" + +#include +#include + + +#include +#include +#include +#include + +//Dude, real recursions on the OS stack? You must be brave... +void print_tree(boost::property_tree::ptree const& pt, const unsigned recursion_depth) +{ + boost::property_tree::ptree::const_iterator end = pt.end(); + for (boost::property_tree::ptree::const_iterator it = pt.begin(); it != end; ++it) { + for(unsigned i = 0; i < recursion_depth; ++i) { + std::cout << " " << std::flush; + } + std::cout << it->first << ": " << it->second.get_value() << std::endl; + print_tree(it->second, recursion_depth+1); + } +} + + +int main (int argc, char * argv[]) { + std::cout << "\n starting up engines, compile at " + << __DATE__ << ", " __TIME__ << std::endl; + BaseConfiguration serverConfig((argc > 1 ? argv[1] : "server.ini")); + OSRM routing_machine((argc > 1 ? argv[1] : "server.ini")); + + RouteParameters route_parameters; + route_parameters.zoomLevel = 18; //no generalization + route_parameters.printInstructions = true; //turn by turn instructions + route_parameters.alternateRoute = true; //get an alternate route, too + route_parameters.geometry = true; //retrieve geometry of route + route_parameters.compression = true; //polyline encoding + route_parameters.checkSum = UINT_MAX; //see wiki + route_parameters.service = "viaroute"; //that's routing + route_parameters.outputFormat = "json"; + route_parameters.jsonpParameter = ""; //set for jsonp wrapping + route_parameters.language = ""; //unused atm + //route_parameters.hints.push_back(); // see wiki, saves I/O if done properly + + _Coordinate start_coordinate(52.519930*100000,13.438640*100000); + _Coordinate target_coordinate(52.513191*100000,13.415852*100000); + route_parameters.coordinates.push_back(start_coordinate); + route_parameters.coordinates.push_back(target_coordinate); + + http::Reply osrm_reply; + + routing_machine.RunQuery(route_parameters, osrm_reply); + + std::cout << osrm_reply.content << std::endl; + + //attention: super-inefficient hack below: + + std::stringstream ss; + ss << osrm_reply.content; + + boost::property_tree::ptree pt; + boost::property_tree::read_json(ss, pt); + + print_tree(pt, 0); + return 0; +}