Merge pull request #1292 from Project-OSRM/feature/json_lib_interface
Feature/json lib interface
This commit is contained in:
commit
e296264ea6
@ -71,7 +71,7 @@ file(GLOB ServerGlob Server/*.cpp)
|
|||||||
file(GLOB DescriptorGlob descriptors/*.cpp)
|
file(GLOB DescriptorGlob descriptors/*.cpp)
|
||||||
file(GLOB DatastructureGlob data_structures/search_engine_data.cpp data_structures/route_parameters.cpp Util/bearing.cpp)
|
file(GLOB DatastructureGlob data_structures/search_engine_data.cpp data_structures/route_parameters.cpp Util/bearing.cpp)
|
||||||
list(REMOVE_ITEM DatastructureGlob data_structures/Coordinate.cpp)
|
list(REMOVE_ITEM DatastructureGlob data_structures/Coordinate.cpp)
|
||||||
file(GLOB CoordinateGlob data_structures/Coordinate.cpp)
|
file(GLOB CoordinateGlob data_structures/coordinate.cpp)
|
||||||
file(GLOB AlgorithmGlob algorithms/*.cpp)
|
file(GLOB AlgorithmGlob algorithms/*.cpp)
|
||||||
file(GLOB HttpGlob Server/Http/*.cpp)
|
file(GLOB HttpGlob Server/Http/*.cpp)
|
||||||
file(GLOB LibOSRMGlob Library/*.cpp)
|
file(GLOB LibOSRMGlob Library/*.cpp)
|
||||||
@ -299,7 +299,7 @@ if(WITH_TOOLS OR BUILD_TOOLS)
|
|||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "libgdal and/or development headers not found")
|
message(FATAL_ERROR "libgdal and/or development headers not found")
|
||||||
endif()
|
endif()
|
||||||
add_executable(osrm-cli tools/simpleclient.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:LOGGER>)
|
add_executable(osrm-cli tools/simpleclient.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:COORDINATE>)
|
||||||
target_link_libraries(osrm-cli ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM)
|
target_link_libraries(osrm-cli ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM)
|
||||||
target_link_libraries(osrm-cli ${TBB_LIBRARIES})
|
target_link_libraries(osrm-cli ${TBB_LIBRARIES})
|
||||||
add_executable(osrm-io-benchmark tools/io-benchmark.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:LOGGER>)
|
add_executable(osrm-io-benchmark tools/io-benchmark.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:LOGGER>)
|
||||||
@ -321,7 +321,8 @@ if(WITH_TOOLS OR BUILD_TOOLS)
|
|||||||
install(TARGETS osrm-springclean DESTINATION bin)
|
install(TARGETS osrm-springclean DESTINATION bin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(GLOB InstallGlob Include/osrm/*.h Library/OSRM.h)
|
file(GLOB InstallGlob Include/osrm/*.hpp Library/OSRM.h)
|
||||||
|
file(GLOB VariantGlob Include/variant/*.hpp)
|
||||||
|
|
||||||
# Add RPATH info to executables so that when they are run after being installed
|
# Add RPATH info to executables so that when they are run after being installed
|
||||||
# (i.e., from /usr/local/bin/) the linker can find library dependencies. For
|
# (i.e., from /usr/local/bin/) the linker can find library dependencies. For
|
||||||
@ -332,6 +333,7 @@ set_property(TARGET osrm-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|||||||
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
|
|
||||||
install(FILES ${InstallGlob} DESTINATION include/osrm)
|
install(FILES ${InstallGlob} DESTINATION include/osrm)
|
||||||
|
install(FILES ${VariantGlob} DESTINATION include/variant)
|
||||||
install(TARGETS osrm-extract DESTINATION bin)
|
install(TARGETS osrm-extract DESTINATION bin)
|
||||||
install(TARGETS osrm-prepare DESTINATION bin)
|
install(TARGETS osrm-prepare DESTINATION bin)
|
||||||
install(TARGETS osrm-datastore DESTINATION bin)
|
install(TARGETS osrm-datastore DESTINATION bin)
|
||||||
|
@ -25,8 +25,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FIXED_POINT_COORDINATE_H_
|
#ifndef COORDINATE_HPP_
|
||||||
#define FIXED_POINT_COORDINATE_H_
|
#define COORDINATE_HPP_
|
||||||
|
|
||||||
#include <iosfwd> //for std::ostream
|
#include <iosfwd> //for std::ostream
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
constexpr float COORDINATE_PRECISION = 1000000.f;
|
constexpr static const float COORDINATE_PRECISION = 1000000.f;
|
||||||
}
|
}
|
||||||
struct FixedPointCoordinate
|
struct FixedPointCoordinate
|
||||||
{
|
{
|
||||||
@ -110,4 +110,4 @@ inline std::ostream &operator<<(std::ostream &out_stream, FixedPointCoordinate c
|
|||||||
return out_stream;
|
return out_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* FIXED_POINT_COORDINATE_H_ */
|
#endif /* COORDINATE_HPP_ */
|
@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef ROUTE_PARAMETERS_H
|
#ifndef ROUTE_PARAMETERS_H
|
||||||
#define ROUTE_PARAMETERS_H
|
#define ROUTE_PARAMETERS_H
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <boost/fusion/container/vector/vector_fwd.hpp>
|
#include <boost/fusion/container/vector/vector_fwd.hpp>
|
||||||
|
|
@ -28,16 +28,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef OSRM_H
|
#ifndef OSRM_H
|
||||||
#define OSRM_H
|
#define OSRM_H
|
||||||
|
|
||||||
#include <osrm/ServerPaths.h>
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
class OSRM_impl;
|
class OSRM_impl;
|
||||||
struct RouteParameters;
|
struct RouteParameters;
|
||||||
|
|
||||||
namespace http
|
namespace JSON
|
||||||
{
|
{
|
||||||
class Reply;
|
struct Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
class OSRM
|
class OSRM
|
||||||
@ -48,7 +48,7 @@ class OSRM
|
|||||||
public:
|
public:
|
||||||
explicit OSRM(ServerPaths paths, const bool use_shared_memory = false);
|
explicit OSRM(ServerPaths paths, const bool use_shared_memory = false);
|
||||||
~OSRM();
|
~OSRM();
|
||||||
void RunQuery(RouteParameters &route_parameters, http::Reply &reply);
|
int RunQuery(RouteParameters &route_parameters, JSON::Object &json_result);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OSRM_H
|
#endif // OSRM_H
|
||||||
|
@ -30,10 +30,6 @@ namespace boost { namespace interprocess { class named_mutex; } }
|
|||||||
#include "OSRM_impl.h"
|
#include "OSRM_impl.h"
|
||||||
#include "OSRM.h"
|
#include "OSRM.h"
|
||||||
|
|
||||||
#include <osrm/Reply.h>
|
|
||||||
#include <osrm/RouteParameters.h>
|
|
||||||
#include <osrm/ServerPaths.h>
|
|
||||||
|
|
||||||
#include "../plugins/distance_table.hpp"
|
#include "../plugins/distance_table.hpp"
|
||||||
#include "../plugins/hello_world.hpp"
|
#include "../plugins/hello_world.hpp"
|
||||||
#include "../plugins/locate.hpp"
|
#include "../plugins/locate.hpp"
|
||||||
@ -52,6 +48,9 @@ namespace boost { namespace interprocess { class named_mutex; } }
|
|||||||
#include <boost/interprocess/sync/named_condition.hpp>
|
#include <boost/interprocess/sync/named_condition.hpp>
|
||||||
#include <boost/interprocess/sync/scoped_lock.hpp>
|
#include <boost/interprocess/sync/scoped_lock.hpp>
|
||||||
|
|
||||||
|
#include <osrm/route_parameters.hpp>
|
||||||
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@ -99,13 +98,12 @@ void OSRM_impl::RegisterPlugin(BasePlugin *plugin)
|
|||||||
plugin_map.emplace(plugin->GetDescriptor(), plugin);
|
plugin_map.emplace(plugin->GetDescriptor(), plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply)
|
int OSRM_impl::RunQuery(RouteParameters &route_parameters, JSON::Object &json_result)
|
||||||
{
|
{
|
||||||
const PluginMap::const_iterator &iter = plugin_map.find(route_parameters.service);
|
const PluginMap::const_iterator &iter = plugin_map.find(route_parameters.service);
|
||||||
|
|
||||||
if (plugin_map.end() != iter)
|
if (plugin_map.end() != iter)
|
||||||
{
|
{
|
||||||
reply.status = http::Reply::ok;
|
|
||||||
if (barrier)
|
if (barrier)
|
||||||
{
|
{
|
||||||
// lock update pending
|
// lock update pending
|
||||||
@ -126,7 +124,7 @@ void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply)
|
|||||||
->CheckAndReloadFacade();
|
->CheckAndReloadFacade();
|
||||||
}
|
}
|
||||||
|
|
||||||
iter->second->HandleRequest(route_parameters, reply);
|
iter->second->HandleRequest(route_parameters, json_result);
|
||||||
if (barrier)
|
if (barrier)
|
||||||
{
|
{
|
||||||
// lock query
|
// lock query
|
||||||
@ -143,10 +141,11 @@ void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply)
|
|||||||
barrier->no_running_queries_condition.notify_all();
|
barrier->no_running_queries_condition.notify_all();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 200;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
return 400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +158,7 @@ OSRM::OSRM(ServerPaths paths, const bool use_shared_memory)
|
|||||||
|
|
||||||
OSRM::~OSRM() { OSRM_pimpl_.reset(); }
|
OSRM::~OSRM() { OSRM_pimpl_.reset(); }
|
||||||
|
|
||||||
void OSRM::RunQuery(RouteParameters &route_parameters, http::Reply &reply)
|
int OSRM::RunQuery(RouteParameters &route_parameters, JSON::Object &json_result)
|
||||||
{
|
{
|
||||||
OSRM_pimpl_->RunQuery(route_parameters, reply);
|
return OSRM_pimpl_->RunQuery(route_parameters, json_result);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,8 @@ class BasePlugin;
|
|||||||
namespace http { class Reply; }
|
namespace http { class Reply; }
|
||||||
struct RouteParameters;
|
struct RouteParameters;
|
||||||
|
|
||||||
#include <osrm/ServerPaths.h>
|
#include <osrm/json_container.hpp>
|
||||||
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
#include "../data_structures/query_edge.hpp"
|
#include "../data_structures/query_edge.hpp"
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ class OSRM_impl
|
|||||||
OSRM_impl(ServerPaths paths, const bool use_shared_memory);
|
OSRM_impl(ServerPaths paths, const bool use_shared_memory);
|
||||||
OSRM_impl(const OSRM_impl &) = delete;
|
OSRM_impl(const OSRM_impl &) = delete;
|
||||||
virtual ~OSRM_impl();
|
virtual ~OSRM_impl();
|
||||||
void RunQuery(RouteParameters &route_parameters, http::Reply &reply);
|
int RunQuery(RouteParameters &route_parameters, JSON::Object &json_result);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RegisterPlugin(BasePlugin *plugin);
|
void RegisterPlugin(BasePlugin *plugin);
|
||||||
|
@ -30,10 +30,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
// #include "RequestParser.h"
|
// #include "RequestParser.h"
|
||||||
#include "Http/CompressionType.h"
|
#include "Http/CompressionType.h"
|
||||||
|
#include "Http/Reply.h"
|
||||||
#include "Http/Request.h"
|
#include "Http/Request.h"
|
||||||
|
|
||||||
#include <osrm/Reply.h>
|
|
||||||
|
|
||||||
#include <boost/array.hpp>
|
#include <boost/array.hpp>
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
@ -39,7 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../../Util/string_util.hpp"
|
#include "../../Util/string_util.hpp"
|
||||||
#include "../../typedefs.h"
|
#include "../../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -43,8 +43,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../../Util/graph_loader.hpp"
|
#include "../../Util/graph_loader.hpp"
|
||||||
#include "../../Util/simple_logger.hpp"
|
#include "../../Util/simple_logger.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
#include <osrm/ServerPaths.h>
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
template <class EdgeDataT> class InternalDataFacade : public BaseDataFacade<EdgeDataT>
|
template <class EdgeDataT> class InternalDataFacade : public BaseDataFacade<EdgeDataT>
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <osrm/Reply.h>
|
#include "Reply.h"
|
||||||
|
|
||||||
#include "../../Util/cast.hpp"
|
#include "../../Util/cast.hpp"
|
||||||
|
|
||||||
|
@ -28,17 +28,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "RequestHandler.h"
|
#include "RequestHandler.h"
|
||||||
|
|
||||||
#include "APIGrammar.h"
|
#include "APIGrammar.h"
|
||||||
|
#include "Http/Reply.h"
|
||||||
#include "Http/Request.h"
|
#include "Http/Request.h"
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../Library/OSRM.h"
|
#include "../Library/OSRM.h"
|
||||||
#include "../Util/json_renderer.hpp"
|
#include "../Util/json_renderer.hpp"
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
#include "../Util/string_util.hpp"
|
#include "../Util/string_util.hpp"
|
||||||
|
#include "../Util/xml_renderer.hpp"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Reply.h>
|
#include <osrm/route_parameters.hpp>
|
||||||
#include <osrm/RouteParameters.h>
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|
||||||
@ -84,13 +85,14 @@ void RequestHandler::handle_request(const http::Request &req, http::Reply &reply
|
|||||||
auto iter = request.begin();
|
auto iter = request.begin();
|
||||||
const bool result = boost::spirit::qi::parse(iter, request.end(), api_parser);
|
const bool result = boost::spirit::qi::parse(iter, request.end(), api_parser);
|
||||||
|
|
||||||
|
JSON::Object json_result;
|
||||||
// check if the was an error with the request
|
// check if the was an error with the request
|
||||||
if (!result || (iter != request.end()))
|
if (!result || (iter != request.end()))
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
reply = http::Reply::StockReply(http::Reply::badRequest);
|
||||||
reply.content.clear();
|
reply.content.clear();
|
||||||
const auto position = std::distance(request.begin(), iter);
|
const auto position = std::distance(request.begin(), iter);
|
||||||
JSON::Object json_result;
|
|
||||||
json_result.values["status"] = 400;
|
json_result.values["status"] = 400;
|
||||||
std::string message = "Query string malformed close to position ";
|
std::string message = "Query string malformed close to position ";
|
||||||
message += cast::integral_to_string(position);
|
message += cast::integral_to_string(position);
|
||||||
@ -107,29 +109,41 @@ void RequestHandler::handle_request(const http::Request &req, http::Reply &reply
|
|||||||
const std::string json_p = (route_parameters.jsonp_parameter + "(");
|
const std::string json_p = (route_parameters.jsonp_parameter + "(");
|
||||||
reply.content.insert(reply.content.end(), json_p.begin(), json_p.end());
|
reply.content.insert(reply.content.end(), json_p.begin(), json_p.end());
|
||||||
}
|
}
|
||||||
routing_machine->RunQuery(route_parameters, reply);
|
const auto return_code = routing_machine->RunQuery(route_parameters, json_result);
|
||||||
if (!route_parameters.jsonp_parameter.empty())
|
if (200 != return_code)
|
||||||
{ // append brace to jsonp response
|
{
|
||||||
reply.content.push_back(')');
|
reply = http::Reply::StockReply(http::Reply::badRequest);
|
||||||
|
reply.content.clear();
|
||||||
|
json_result.values["status"] = 400;
|
||||||
|
std::string message = "Bad Request";
|
||||||
|
json_result.values["status_message"] = message;
|
||||||
|
JSON::render(reply.content, json_result);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set headers
|
// set headers
|
||||||
reply.headers.emplace_back("Content-Length", cast::integral_to_string(reply.content.size()));
|
reply.headers.emplace_back("Content-Length", cast::integral_to_string(reply.content.size()));
|
||||||
if ("gpx" == route_parameters.output_format)
|
if ("gpx" == route_parameters.output_format)
|
||||||
{ // gpx file
|
{ // gpx file
|
||||||
|
JSON::gpx_render(reply.content, json_result.values["route"]);
|
||||||
reply.headers.emplace_back("Content-Type", "application/gpx+xml; charset=UTF-8");
|
reply.headers.emplace_back("Content-Type", "application/gpx+xml; charset=UTF-8");
|
||||||
reply.headers.emplace_back("Content-Disposition", "attachment; filename=\"route.gpx\"");
|
reply.headers.emplace_back("Content-Disposition", "attachment; filename=\"route.gpx\"");
|
||||||
}
|
}
|
||||||
else if (route_parameters.jsonp_parameter.empty())
|
else if (route_parameters.jsonp_parameter.empty())
|
||||||
{ // json file
|
{ // json file
|
||||||
|
JSON::render(reply.content, json_result);
|
||||||
reply.headers.emplace_back("Content-Type", "application/json; charset=UTF-8");
|
reply.headers.emplace_back("Content-Type", "application/json; charset=UTF-8");
|
||||||
reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.json\"");
|
reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.json\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // jsonp
|
{ // jsonp
|
||||||
|
JSON::render(reply.content, json_result);
|
||||||
reply.headers.emplace_back("Content-Type", "text/javascript; charset=UTF-8");
|
reply.headers.emplace_back("Content-Type", "text/javascript; charset=UTF-8");
|
||||||
reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.js\"");
|
reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.js\"");
|
||||||
}
|
}
|
||||||
|
if (!route_parameters.jsonp_parameter.empty())
|
||||||
|
{ // append brace to jsonp response
|
||||||
|
reply.content.push_back(')');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const std::exception &e)
|
catch (const std::exception &e)
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define REQUEST_PARSER_H
|
#define REQUEST_PARSER_H
|
||||||
|
|
||||||
#include "Http/CompressionType.h"
|
#include "Http/CompressionType.h"
|
||||||
#include <osrm/Header.h>
|
#include "Http/Header.h"
|
||||||
|
|
||||||
#include <boost/logic/tribool.hpp>
|
#include <boost/logic/tribool.hpp>
|
||||||
#include <boost/tuple/tuple.hpp>
|
#include <boost/tuple/tuple.hpp>
|
||||||
|
@ -27,12 +27,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../../algorithms/douglas_peucker.hpp"
|
#include "../../algorithms/douglas_peucker.hpp"
|
||||||
#include "../../data_structures/segment_information.hpp"
|
#include "../../data_structures/segment_information.hpp"
|
||||||
#include "../../Include/osrm/Coordinate.h"
|
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
#include <boost/test/test_case_template.hpp>
|
#include <boost/test/test_case_template.hpp>
|
||||||
#include <boost/mpl/list.hpp>
|
#include <boost/mpl/list.hpp>
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(douglas_peucker)
|
BOOST_AUTO_TEST_SUITE(douglas_peucker)
|
||||||
|
@ -31,12 +31,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../../Util/floating_point.hpp"
|
#include "../../Util/floating_point.hpp"
|
||||||
#include "../../typedefs.h"
|
#include "../../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
#include <boost/test/test_case_template.hpp>
|
#include <boost/test/test_case_template.hpp>
|
||||||
#include <boost/mpl/list.hpp>
|
#include <boost/mpl/list.hpp>
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "osrm_exception.hpp"
|
#include "osrm_exception.hpp"
|
||||||
#include "simple_logger.hpp"
|
#include "simple_logger.hpp"
|
||||||
|
|
||||||
#include <osrm/ServerPaths.h>
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
#include <boost/any.hpp>
|
#include <boost/any.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
@ -33,11 +33,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "osrm_exception.hpp"
|
#include "osrm_exception.hpp"
|
||||||
#include "simple_logger.hpp"
|
#include "simple_logger.hpp"
|
||||||
|
|
||||||
#include <osrm/ServerPaths.h>
|
|
||||||
|
|
||||||
#include <boost/any.hpp>
|
#include <boost/any.hpp>
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -29,7 +29,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "TrigonometryTables.h"
|
#include "TrigonometryTables.h"
|
||||||
#include "../Util/MercatorUtil.h"
|
#include "../Util/MercatorUtil.h"
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
@ -31,9 +31,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef JSON_RENDERER_HPP
|
#ifndef JSON_RENDERER_HPP
|
||||||
#define JSON_RENDERER_HPP
|
#define JSON_RENDERER_HPP
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "cast.hpp"
|
#include "cast.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
namespace JSON {
|
namespace JSON {
|
||||||
|
|
||||||
struct Renderer : mapbox::util::static_visitor<>
|
struct Renderer : mapbox::util::static_visitor<>
|
||||||
|
@ -28,9 +28,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef XML_RENDERER_HPP
|
#ifndef XML_RENDERER_HPP
|
||||||
#define XML_RENDERER_HPP
|
#define XML_RENDERER_HPP
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "cast.hpp"
|
#include "cast.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
namespace JSON {
|
namespace JSON {
|
||||||
|
|
||||||
struct XMLToArrayRenderer : mapbox::util::static_visitor<>
|
struct XMLToArrayRenderer : mapbox::util::static_visitor<>
|
||||||
|
@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../data_structures/segment_information.hpp"
|
#include "../data_structures/segment_information.hpp"
|
||||||
#include "../Util/integer_range.hpp"
|
#include "../Util/integer_range.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "polyline_compressor.hpp"
|
#include "polyline_compressor.hpp"
|
||||||
#include "../data_structures/segment_information.hpp"
|
#include "../data_structures/segment_information.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
std::string PolylineCompressor::encode_vector(std::vector<int> &numbers) const
|
std::string PolylineCompressor::encode_vector(std::vector<int> &numbers) const
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "polyline_compressor.hpp"
|
#include "polyline_compressor.hpp"
|
||||||
#include "../data_structures/segment_information.hpp"
|
#include "../data_structures/segment_information.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
JSON::String
|
JSON::String
|
||||||
PolylineFormatter::printEncodedString(const std::vector<SegmentInformation> &polyline) const
|
PolylineFormatter::printEncodedString(const std::vector<SegmentInformation> &polyline) const
|
||||||
|
@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
struct SegmentInformation;
|
struct SegmentInformation;
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -42,7 +42,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../Util/std_hash.hpp"
|
#include "../Util/std_hash.hpp"
|
||||||
#include "../Util/timing_util.hpp"
|
#include "../Util/timing_util.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
@ -29,10 +29,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../data_structures/query_node.hpp"
|
#include "../data_structures/query_node.hpp"
|
||||||
#include "../data_structures/shared_memory_vector_wrapper.hpp"
|
#include "../data_structures/shared_memory_vector_wrapper.hpp"
|
||||||
#include "../data_structures/static_rtree.hpp"
|
#include "../data_structures/static_rtree.hpp"
|
||||||
#include "../data_structures/edge_based_node.hpp"
|
|
||||||
#include "../Util/BoostFileSystemFix.h"
|
#include "../Util/BoostFileSystemFix.h"
|
||||||
|
#include "../data_structures/edge_based_node.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <random>
|
#include <random>
|
||||||
|
|
||||||
|
@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
of conditions and the following disclaimer.
|
|
||||||
Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef INPUT_READER_FACTORY_H
|
|
||||||
#define INPUT_READER_FACTORY_H
|
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
|
||||||
|
|
||||||
#include <bzlib.h>
|
|
||||||
#include <libxml/xmlreader.h>
|
|
||||||
|
|
||||||
struct BZ2Context
|
|
||||||
{
|
|
||||||
FILE *file;
|
|
||||||
BZFILE *bz2;
|
|
||||||
int error;
|
|
||||||
int nUnused;
|
|
||||||
char unused[BZ_MAX_UNUSED];
|
|
||||||
};
|
|
||||||
|
|
||||||
int readFromBz2Stream(void *pointer, char *buffer, int len)
|
|
||||||
{
|
|
||||||
void *unusedTmpVoid = nullptr;
|
|
||||||
char *unusedTmp = nullptr;
|
|
||||||
BZ2Context *context = (BZ2Context *)pointer;
|
|
||||||
int read = 0;
|
|
||||||
while (0 == read &&
|
|
||||||
!(BZ_STREAM_END == context->error && 0 == context->nUnused && feof(context->file)))
|
|
||||||
{
|
|
||||||
read = BZ2_bzRead(&context->error, context->bz2, buffer, len);
|
|
||||||
if (BZ_OK == context->error)
|
|
||||||
{
|
|
||||||
return read;
|
|
||||||
}
|
|
||||||
else if (BZ_STREAM_END == context->error)
|
|
||||||
{
|
|
||||||
BZ2_bzReadGetUnused(&context->error, context->bz2, &unusedTmpVoid, &context->nUnused);
|
|
||||||
BOOST_ASSERT_MSG(BZ_OK == context->error, "Could not BZ2_bzReadGetUnused");
|
|
||||||
unusedTmp = (char *)unusedTmpVoid;
|
|
||||||
for (int i = 0; i < context->nUnused; i++)
|
|
||||||
{
|
|
||||||
context->unused[i] = unusedTmp[i];
|
|
||||||
}
|
|
||||||
BZ2_bzReadClose(&context->error, context->bz2);
|
|
||||||
BOOST_ASSERT_MSG(BZ_OK == context->error, "Could not BZ2_bzReadClose");
|
|
||||||
context->error = BZ_STREAM_END; // set to the stream end for next call to this function
|
|
||||||
if (0 == context->nUnused && feof(context->file))
|
|
||||||
{
|
|
||||||
return read;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
context->bz2 = BZ2_bzReadOpen(
|
|
||||||
&context->error, context->file, 0, 0, context->unused, context->nUnused);
|
|
||||||
BOOST_ASSERT_MSG(nullptr != context->bz2, "Could not open file");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BOOST_ASSERT_MSG(false, "Could not read bz2 file");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return read;
|
|
||||||
}
|
|
||||||
|
|
||||||
int closeBz2Stream(void *pointer)
|
|
||||||
{
|
|
||||||
BZ2Context *context = (BZ2Context *)pointer;
|
|
||||||
fclose(context->file);
|
|
||||||
delete context;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
xmlTextReaderPtr inputReaderFactory(const char *name)
|
|
||||||
{
|
|
||||||
std::string inputName(name);
|
|
||||||
|
|
||||||
if (inputName.find(".osm.bz2") != std::string::npos)
|
|
||||||
{
|
|
||||||
BZ2Context *context = new BZ2Context();
|
|
||||||
context->error = false;
|
|
||||||
context->file = fopen(name, "r");
|
|
||||||
int error;
|
|
||||||
context->bz2 =
|
|
||||||
BZ2_bzReadOpen(&error, context->file, 0, 0, context->unused, context->nUnused);
|
|
||||||
if (context->bz2 == nullptr || context->file == nullptr)
|
|
||||||
{
|
|
||||||
delete context;
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
return xmlReaderForIO(readFromBz2Stream, closeBz2Stream, (void *)context, nullptr, nullptr, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return xmlNewTextReaderFilename(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // INPUT_READER_FACTORY_H
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
Copyright (c) 2015, Project OSRM, Dennis Luxen, others
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -25,7 +25,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
#include "../Util/MercatorUtil.h"
|
#include "../Util/MercatorUtil.h"
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
@ -34,6 +33,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
#endif
|
#endif
|
@ -31,10 +31,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../data_structures/travel_mode.hpp"
|
#include "../data_structures/travel_mode.hpp"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
struct EdgeBasedNode
|
struct EdgeBasedNode
|
||||||
|
@ -27,7 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "hilbert_value.hpp"
|
#include "hilbert_value.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
uint64_t HilbertCode::operator()(const FixedPointCoordinate ¤t_coordinate) const
|
uint64_t HilbertCode::operator()(const FixedPointCoordinate ¤t_coordinate) const
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2014, Project OSRM, Dennis Luxen, others
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -25,15 +25,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef RAW_ROUTE_DATA_HPP
|
#ifndef RAW_ROUTE_DATA_H
|
||||||
#define RAW_ROUTE_DATA_HPP
|
#define RAW_ROUTE_DATA_H
|
||||||
|
|
||||||
#include "../data_structures/phantom_node.hpp"
|
#include "../data_structures/phantom_node.hpp"
|
||||||
#include "../data_structures/travel_mode.hpp"
|
#include "../data_structures/travel_mode.hpp"
|
||||||
#include "../data_structures/turn_instructions.hpp"
|
#include "../data_structures/turn_instructions.hpp"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ struct PathData
|
|||||||
TravelMode travel_mode : 4;
|
TravelMode travel_mode : 4;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RawRouteData
|
struct InternalRouteResult
|
||||||
{
|
{
|
||||||
std::vector<std::vector<PathData>> unpacked_path_segments;
|
std::vector<std::vector<PathData>> unpacked_path_segments;
|
||||||
std::vector<PathData> unpacked_alternative;
|
std::vector<PathData> unpacked_alternative;
|
||||||
@ -80,11 +80,11 @@ struct RawRouteData
|
|||||||
return (leg != unpacked_path_segments.size() - 1);
|
return (leg != unpacked_path_segments.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
RawRouteData() :
|
InternalRouteResult() :
|
||||||
shortest_path_length(INVALID_EDGE_WEIGHT),
|
shortest_path_length(INVALID_EDGE_WEIGHT),
|
||||||
alternative_path_length(INVALID_EDGE_WEIGHT)
|
alternative_path_length(INVALID_EDGE_WEIGHT)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RAW_ROUTE_DATA_HPP
|
#endif // RAW_ROUTE_DATA_H
|
@ -28,10 +28,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef PHANTOM_NODES_H
|
#ifndef PHANTOM_NODES_H
|
||||||
#define PHANTOM_NODES_H
|
#define PHANTOM_NODES_H
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include "travel_mode.hpp"
|
||||||
#include "../data_structures/travel_mode.hpp"
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
struct QueryNode
|
struct QueryNode
|
||||||
|
@ -25,12 +25,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <osrm/RouteParameters.h>
|
|
||||||
|
|
||||||
#include <boost/fusion/container/vector.hpp>
|
#include <boost/fusion/container/vector.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic.hpp>
|
#include <boost/fusion/sequence/intrinsic.hpp>
|
||||||
#include <boost/fusion/include/at_c.hpp>
|
#include <boost/fusion/include/at_c.hpp>
|
||||||
|
|
||||||
|
#include <osrm/route_parameters.hpp>
|
||||||
|
|
||||||
RouteParameters::RouteParameters()
|
RouteParameters::RouteParameters()
|
||||||
: zoom_level(18), print_instructions(false), alternate_route(true), geometry(true),
|
: zoom_level(18), print_instructions(false), alternate_route(true), geometry(true),
|
||||||
compression(true), deprecatedAPI(false), uturn_default(false), check_sum(-1), num_results(1)
|
compression(true), deprecatedAPI(false), uturn_default(false), check_sum(-1), num_results(1)
|
||||||
|
@ -33,7 +33,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../data_structures/travel_mode.hpp"
|
#include "../data_structures/travel_mode.hpp"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
// Struct fits everything in one cache line
|
// Struct fits everything in one cache line
|
||||||
struct SegmentInformation
|
struct SegmentInformation
|
||||||
|
@ -44,7 +44,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../Util/timing_util.hpp"
|
#include "../Util/timing_util.hpp"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
@ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "Util/FingerPrint.h"
|
#include "Util/FingerPrint.h"
|
||||||
#include "typedefs.h"
|
#include "typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
using RTreeLeaf = BaseDataFacade<QueryEdge::EdgeData>::RTreeLeaf;
|
using RTreeLeaf = BaseDataFacade<QueryEdge::EdgeData>::RTreeLeaf;
|
||||||
using RTreeNode = StaticRTree<RTreeLeaf, ShM<FixedPointCoordinate, true>::vector, true>::TreeNode;
|
using RTreeNode = StaticRTree<RTreeLeaf, ShM<FixedPointCoordinate, true>::vector, true>::TreeNode;
|
||||||
|
@ -27,11 +27,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "description_factory.hpp"
|
#include "description_factory.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
#include "../algorithms/polyline_formatter.hpp"
|
#include "../algorithms/polyline_formatter.hpp"
|
||||||
#include "../data_structures/raw_route_data.hpp"
|
#include "../data_structures/internal_route_result.hpp"
|
||||||
#include "../data_structures/turn_instructions.hpp"
|
#include "../data_structures/turn_instructions.hpp"
|
||||||
|
|
||||||
DescriptionFactory::DescriptionFactory() : entire_length(0) { via_indices.push_back(0); }
|
DescriptionFactory::DescriptionFactory() : entire_length(0) { via_indices.push_back(0); }
|
||||||
|
@ -30,14 +30,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../algorithms/douglas_peucker.hpp"
|
#include "../algorithms/douglas_peucker.hpp"
|
||||||
#include "../data_structures/phantom_node.hpp"
|
#include "../data_structures/phantom_node.hpp"
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../data_structures/segment_information.hpp"
|
#include "../data_structures/segment_information.hpp"
|
||||||
#include "../data_structures/turn_instructions.hpp"
|
#include "../data_structures/turn_instructions.hpp"
|
||||||
#include "../typedefs.h"
|
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
@ -28,17 +28,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef DESCRIPTOR_BASE_HPP
|
#ifndef DESCRIPTOR_BASE_HPP
|
||||||
#define DESCRIPTOR_BASE_HPP
|
#define DESCRIPTOR_BASE_HPP
|
||||||
|
|
||||||
|
#include "../data_structures/internal_route_result.hpp"
|
||||||
#include "../data_structures/phantom_node.hpp"
|
#include "../data_structures/phantom_node.hpp"
|
||||||
#include "../data_structures/raw_route_data.hpp"
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Reply.h>
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
struct DescriptorTable : public std::unordered_map<std::string, unsigned>
|
struct DescriptorTable : public std::unordered_map<std::string, unsigned>
|
||||||
{
|
{
|
||||||
unsigned get_id(const std::string &key)
|
unsigned get_id(const std::string &key)
|
||||||
@ -80,8 +79,8 @@ template <class DataFacadeT> class BaseDescriptor
|
|||||||
BaseDescriptor() {}
|
BaseDescriptor() {}
|
||||||
// Maybe someone can explain the pure virtual destructor thing to me (dennis)
|
// Maybe someone can explain the pure virtual destructor thing to me (dennis)
|
||||||
virtual ~BaseDescriptor() {}
|
virtual ~BaseDescriptor() {}
|
||||||
virtual void Run(const RawRouteData &raw_route, http::Reply &reply) = 0;
|
virtual void Run(const InternalRouteResult &, JSON::Object &) = 0;
|
||||||
virtual void SetConfig(const DescriptorConfig &config) = 0;
|
virtual void SetConfig(const DescriptorConfig &) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DESCRIPTOR_BASE_HPP
|
#endif // DESCRIPTOR_BASE_HPP
|
||||||
|
@ -29,9 +29,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define GPX_DESCRIPTOR_HPP
|
#define GPX_DESCRIPTOR_HPP
|
||||||
|
|
||||||
#include "descriptor_base.hpp"
|
#include "descriptor_base.hpp"
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../Util/xml_renderer.hpp"
|
#include "../Util/xml_renderer.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<DataFacadeT>
|
template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<DataFacadeT>
|
||||||
@ -40,7 +41,7 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
|
|||||||
DescriptorConfig config;
|
DescriptorConfig config;
|
||||||
DataFacadeT *facade;
|
DataFacadeT *facade;
|
||||||
|
|
||||||
void AddRoutePoint(const FixedPointCoordinate &coordinate, JSON::Array &json_result)
|
void AddRoutePoint(const FixedPointCoordinate &coordinate, JSON::Array &json_route)
|
||||||
{
|
{
|
||||||
JSON::Object json_lat;
|
JSON::Object json_lat;
|
||||||
JSON::Object json_lon;
|
JSON::Object json_lon;
|
||||||
@ -58,7 +59,7 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
|
|||||||
json_row.values.push_back(json_lon);
|
json_row.values.push_back(json_lon);
|
||||||
JSON::Object entry;
|
JSON::Object entry;
|
||||||
entry.values["rtept"] = json_row;
|
entry.values["rtept"] = json_row;
|
||||||
json_result.values.push_back(entry);
|
json_route.values.push_back(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -66,13 +67,13 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
|
|||||||
|
|
||||||
void SetConfig(const DescriptorConfig &c) final { config = c; }
|
void SetConfig(const DescriptorConfig &c) final { config = c; }
|
||||||
|
|
||||||
void Run(const RawRouteData &raw_route, http::Reply &reply) final
|
void Run(const InternalRouteResult &raw_route, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
JSON::Array json_result;
|
JSON::Array json_route;
|
||||||
if (raw_route.shortest_path_length != INVALID_EDGE_WEIGHT)
|
if (raw_route.shortest_path_length != INVALID_EDGE_WEIGHT)
|
||||||
{
|
{
|
||||||
AddRoutePoint(raw_route.segment_end_coordinates.front().source_phantom.location,
|
AddRoutePoint(raw_route.segment_end_coordinates.front().source_phantom.location,
|
||||||
json_result);
|
json_route);
|
||||||
|
|
||||||
for (const std::vector<PathData> &path_data_vector : raw_route.unpacked_path_segments)
|
for (const std::vector<PathData> &path_data_vector : raw_route.unpacked_path_segments)
|
||||||
{
|
{
|
||||||
@ -80,13 +81,14 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
|
|||||||
{
|
{
|
||||||
const FixedPointCoordinate current_coordinate =
|
const FixedPointCoordinate current_coordinate =
|
||||||
facade->GetCoordinateOfNode(path_data.node);
|
facade->GetCoordinateOfNode(path_data.node);
|
||||||
AddRoutePoint(current_coordinate, json_result);
|
AddRoutePoint(current_coordinate, json_route);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddRoutePoint(raw_route.segment_end_coordinates.back().target_phantom.location,
|
AddRoutePoint(raw_route.segment_end_coordinates.back().target_phantom.location,
|
||||||
json_result);
|
json_route);
|
||||||
}
|
}
|
||||||
JSON::gpx_render(reply.content, json_result);
|
// JSON::gpx_render(reply.content, json_route);
|
||||||
|
json_result.values["route"] = json_route;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif // GPX_DESCRIPTOR_HPP
|
#endif // GPX_DESCRIPTOR_HPP
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2014, Project OSRM, Dennis Luxen, others
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -32,7 +32,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "description_factory.hpp"
|
#include "description_factory.hpp"
|
||||||
#include "../algorithms/object_encoder.hpp"
|
#include "../algorithms/object_encoder.hpp"
|
||||||
#include "../algorithms/route_name_extraction.hpp"
|
#include "../algorithms/route_name_extraction.hpp"
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../data_structures/segment_information.hpp"
|
#include "../data_structures/segment_information.hpp"
|
||||||
#include "../data_structures/turn_instructions.hpp"
|
#include "../data_structures/turn_instructions.hpp"
|
||||||
#include "../Util/bearing.hpp"
|
#include "../Util/bearing.hpp"
|
||||||
@ -42,6 +41,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../Util/string_util.hpp"
|
#include "../Util/string_util.hpp"
|
||||||
#include "../Util/timing_util.hpp"
|
#include "../Util/timing_util.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<DataFacadeT>
|
template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<DataFacadeT>
|
||||||
@ -97,15 +98,14 @@ template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<
|
|||||||
return added_element_count;
|
return added_element_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Run(const RawRouteData &raw_route, http::Reply &reply) final
|
void Run(const InternalRouteResult &raw_route, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
JSON::Object json_result;
|
|
||||||
if (INVALID_EDGE_WEIGHT == raw_route.shortest_path_length)
|
if (INVALID_EDGE_WEIGHT == raw_route.shortest_path_length)
|
||||||
{
|
{
|
||||||
// We do not need to do much, if there is no route ;-)
|
// We do not need to do much, if there is no route ;-)
|
||||||
json_result.values["status"] = 207;
|
json_result.values["status"] = 207;
|
||||||
json_result.values["status_message"] = "Cannot find route between points";
|
json_result.values["status_message"] = "Cannot find route between points";
|
||||||
JSON::render(reply.content, json_result);
|
// JSON::render(reply.content, json_result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,10 +294,10 @@ template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<
|
|||||||
json_result.values["hint_data"] = json_hint_object;
|
json_result.values["hint_data"] = json_hint_object;
|
||||||
|
|
||||||
// render the content to the output array
|
// render the content to the output array
|
||||||
TIMER_START(route_render);
|
// TIMER_START(route_render);
|
||||||
JSON::render(reply.content, json_result);
|
// JSON::render(reply.content, json_result);
|
||||||
TIMER_STOP(route_render);
|
// TIMER_STOP(route_render);
|
||||||
SimpleLogger().Write(logDEBUG) << "rendering took: " << TIMER_MSEC(route_render);
|
// SimpleLogger().Write(logDEBUG) << "rendering took: " << TIMER_MSEC(route_render);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: reorder parameters
|
// TODO: reorder parameters
|
||||||
@ -390,4 +390,4 @@ template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* JSON_DESCRIPTOR_HPP */
|
#endif /* JSON_DESCRIPTOR_H_ */
|
||||||
|
@ -35,7 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../Util/container.hpp"
|
#include "../Util/container.hpp"
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -30,10 +30,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
#include "../data_structures/travel_mode.hpp"
|
#include "../data_structures/travel_mode.hpp"
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
struct InternalExtractorEdge
|
struct InternalExtractorEdge
|
||||||
{
|
{
|
||||||
InternalExtractorEdge()
|
InternalExtractorEdge()
|
||||||
|
@ -31,7 +31,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "plugin_base.hpp"
|
#include "plugin_base.hpp"
|
||||||
|
|
||||||
#include "../algorithms/object_encoder.hpp"
|
#include "../algorithms/object_encoder.hpp"
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../data_structures/query_edge.hpp"
|
#include "../data_structures/query_edge.hpp"
|
||||||
#include "../data_structures/search_engine.hpp"
|
#include "../data_structures/search_engine.hpp"
|
||||||
#include "../descriptors/descriptor_base.hpp"
|
#include "../descriptors/descriptor_base.hpp"
|
||||||
@ -40,6 +39,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../Util/string_util.hpp"
|
#include "../Util/string_util.hpp"
|
||||||
#include "../Util/timing_util.hpp"
|
#include "../Util/timing_util.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -63,12 +64,11 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
|
|||||||
|
|
||||||
const std::string GetDescriptor() const final { return descriptor_string; }
|
const std::string GetDescriptor() const final { return descriptor_string; }
|
||||||
|
|
||||||
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
|
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
if (!check_all_coordinates(route_parameters.coordinates))
|
if (!check_all_coordinates(route_parameters.coordinates))
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
return 400;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
|
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
|
||||||
@ -102,11 +102,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
|
|||||||
|
|
||||||
if (!result_table)
|
if (!result_table)
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
return 400;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JSON::Object json_object;
|
|
||||||
JSON::Array json_array;
|
JSON::Array json_array;
|
||||||
const auto number_of_locations = phantom_node_vector.size();
|
const auto number_of_locations = phantom_node_vector.size();
|
||||||
for (const auto row : osrm::irange<std::size_t>(0, number_of_locations))
|
for (const auto row : osrm::irange<std::size_t>(0, number_of_locations))
|
||||||
@ -117,8 +115,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
|
|||||||
json_row.values.insert(json_row.values.end(), row_begin_iterator, row_end_iterator);
|
json_row.values.insert(json_row.values.end(), row_begin_iterator, row_end_iterator);
|
||||||
json_array.values.push_back(json_row);
|
json_array.values.push_back(json_row);
|
||||||
}
|
}
|
||||||
json_object.values["distance_table"] = json_array;
|
json_result.values["distance_table"] = json_array;
|
||||||
JSON::render(reply.content, json_object);
|
// JSON::render(reply.content, json_object);
|
||||||
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -30,10 +30,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "plugin_base.hpp"
|
#include "plugin_base.hpp"
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../Util/cast.hpp"
|
#include "../Util/cast.hpp"
|
||||||
#include "../Util/json_renderer.hpp"
|
#include "../Util/json_renderer.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class HelloWorldPlugin final : public BasePlugin
|
class HelloWorldPlugin final : public BasePlugin
|
||||||
@ -46,11 +47,8 @@ class HelloWorldPlugin final : public BasePlugin
|
|||||||
virtual ~HelloWorldPlugin() {}
|
virtual ~HelloWorldPlugin() {}
|
||||||
const std::string GetDescriptor() const final { return descriptor_string; }
|
const std::string GetDescriptor() const final { return descriptor_string; }
|
||||||
|
|
||||||
void HandleRequest(const RouteParameters &routeParameters, http::Reply &reply) final
|
int HandleRequest(const RouteParameters &routeParameters, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
reply.status = http::Reply::ok;
|
|
||||||
|
|
||||||
JSON::Object json_result;
|
|
||||||
std::string temp_string;
|
std::string temp_string;
|
||||||
json_result.values["title"] = "Hello World";
|
json_result.values["title"] = "Hello World";
|
||||||
|
|
||||||
@ -96,8 +94,7 @@ class HelloWorldPlugin final : public BasePlugin
|
|||||||
++counter;
|
++counter;
|
||||||
}
|
}
|
||||||
json_result.values["hints"] = json_hints;
|
json_result.values["hints"] = json_hints;
|
||||||
|
return 200;
|
||||||
JSON::render(reply.content, json_result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -30,10 +30,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "plugin_base.hpp"
|
#include "plugin_base.hpp"
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../Util/json_renderer.hpp"
|
#include "../Util/json_renderer.hpp"
|
||||||
#include "../Util/string_util.hpp"
|
#include "../Util/string_util.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
// locates the nearest node in the road network for a given coordinate.
|
// locates the nearest node in the road network for a given coordinate.
|
||||||
@ -43,16 +44,14 @@ template <class DataFacadeT> class LocatePlugin final : public BasePlugin
|
|||||||
explicit LocatePlugin(DataFacadeT *facade) : descriptor_string("locate"), facade(facade) {}
|
explicit LocatePlugin(DataFacadeT *facade) : descriptor_string("locate"), facade(facade) {}
|
||||||
const std::string GetDescriptor() const final { return descriptor_string; }
|
const std::string GetDescriptor() const final { return descriptor_string; }
|
||||||
|
|
||||||
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
|
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
// check number of parameters
|
// check number of parameters
|
||||||
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
|
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
return 400;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JSON::Object json_result;
|
|
||||||
FixedPointCoordinate result;
|
FixedPointCoordinate result;
|
||||||
if (!facade->LocateClosestEndPointForCoordinate(route_parameters.coordinates.front(),
|
if (!facade->LocateClosestEndPointForCoordinate(route_parameters.coordinates.front(),
|
||||||
result))
|
result))
|
||||||
@ -61,15 +60,13 @@ template <class DataFacadeT> class LocatePlugin final : public BasePlugin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
reply.status = http::Reply::ok;
|
|
||||||
json_result.values["status"] = 0;
|
json_result.values["status"] = 0;
|
||||||
JSON::Array json_coordinate;
|
JSON::Array json_coordinate;
|
||||||
json_coordinate.values.push_back(result.lat / COORDINATE_PRECISION);
|
json_coordinate.values.push_back(result.lat / COORDINATE_PRECISION);
|
||||||
json_coordinate.values.push_back(result.lon / COORDINATE_PRECISION);
|
json_coordinate.values.push_back(result.lon / COORDINATE_PRECISION);
|
||||||
json_result.values["mapped_coordinate"] = json_coordinate;
|
json_result.values["mapped_coordinate"] = json_coordinate;
|
||||||
}
|
}
|
||||||
|
return 200;
|
||||||
JSON::render(reply.content, json_result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -30,11 +30,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "plugin_base.hpp"
|
#include "plugin_base.hpp"
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../data_structures/phantom_node.hpp"
|
#include "../data_structures/phantom_node.hpp"
|
||||||
#include "../Util/integer_range.hpp"
|
#include "../Util/integer_range.hpp"
|
||||||
#include "../Util/json_renderer.hpp"
|
#include "../Util/json_renderer.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -48,13 +49,12 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
|
|||||||
|
|
||||||
const std::string GetDescriptor() const final { return descriptor_string; }
|
const std::string GetDescriptor() const final { return descriptor_string; }
|
||||||
|
|
||||||
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
|
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
// check number of parameters
|
// check number of parameters
|
||||||
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
|
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
return 400;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
auto number_of_results = static_cast<std::size_t>(route_parameters.num_results);
|
auto number_of_results = static_cast<std::size_t>(route_parameters.num_results);
|
||||||
std::vector<PhantomNode> phantom_node_vector;
|
std::vector<PhantomNode> phantom_node_vector;
|
||||||
@ -62,14 +62,13 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
|
|||||||
phantom_node_vector,
|
phantom_node_vector,
|
||||||
static_cast<int>(number_of_results));
|
static_cast<int>(number_of_results));
|
||||||
|
|
||||||
JSON::Object json_result;
|
|
||||||
if (phantom_node_vector.empty() || !phantom_node_vector.front().is_valid())
|
if (phantom_node_vector.empty() || !phantom_node_vector.front().is_valid())
|
||||||
{
|
{
|
||||||
json_result.values["status"] = 207;
|
json_result.values["status"] = 207;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
reply.status = http::Reply::ok;
|
// reply.status = http::Reply::ok;
|
||||||
json_result.values["status"] = 0;
|
json_result.values["status"] = 0;
|
||||||
|
|
||||||
if (number_of_results > 1)
|
if (number_of_results > 1)
|
||||||
@ -106,7 +105,7 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
|
|||||||
json_result.values["name"] = temp_string;
|
json_result.values["name"] = temp_string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JSON::render(reply.content, json_result);
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -28,9 +28,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef BASEPLUGIN_H_
|
#ifndef BASEPLUGIN_H_
|
||||||
#define BASEPLUGIN_H_
|
#define BASEPLUGIN_H_
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
#include <osrm/Reply.h>
|
#include <osrm/json_container.hpp>
|
||||||
#include <osrm/RouteParameters.h>
|
#include <osrm/route_parameters.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -42,8 +42,8 @@ class BasePlugin
|
|||||||
// Maybe someone can explain the pure virtual destructor thing to me (dennis)
|
// Maybe someone can explain the pure virtual destructor thing to me (dennis)
|
||||||
virtual ~BasePlugin() {}
|
virtual ~BasePlugin() {}
|
||||||
virtual const std::string GetDescriptor() const = 0;
|
virtual const std::string GetDescriptor() const = 0;
|
||||||
virtual void HandleRequest(const RouteParameters &routeParameters, http::Reply &reply) = 0;
|
virtual int HandleRequest(const RouteParameters &, JSON::Object &) = 0;
|
||||||
virtual bool check_all_coordinates(const std::vector<FixedPointCoordinate> coordinates) const final
|
virtual bool check_all_coordinates(const std::vector<FixedPointCoordinate> &coordinates) const final
|
||||||
{
|
{
|
||||||
if (2 > coordinates.size() ||
|
if (2 > coordinates.size() ||
|
||||||
std::any_of(std::begin(coordinates),
|
std::any_of(std::begin(coordinates),
|
||||||
|
@ -30,9 +30,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "plugin_base.hpp"
|
#include "plugin_base.hpp"
|
||||||
|
|
||||||
#include "../data_structures/json_container.hpp"
|
|
||||||
#include "../Util/json_renderer.hpp"
|
#include "../Util/json_renderer.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
template <class DataFacadeT> class TimestampPlugin final : public BasePlugin
|
template <class DataFacadeT> class TimestampPlugin final : public BasePlugin
|
||||||
@ -43,14 +44,12 @@ template <class DataFacadeT> class TimestampPlugin final : public BasePlugin
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
const std::string GetDescriptor() const final { return descriptor_string; }
|
const std::string GetDescriptor() const final { return descriptor_string; }
|
||||||
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
|
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
reply.status = http::Reply::ok;
|
|
||||||
JSON::Object json_result;
|
|
||||||
json_result.values["status"] = 0;
|
json_result.values["status"] = 0;
|
||||||
const std::string timestamp = facade->GetTimestamp();
|
const std::string timestamp = facade->GetTimestamp();
|
||||||
json_result.values["timestamp"] = timestamp;
|
json_result.values["timestamp"] = timestamp;
|
||||||
JSON::render(reply.content, json_result);
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -40,6 +40,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../Util/make_unique.hpp"
|
#include "../Util/make_unique.hpp"
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
|
|
||||||
|
#include <osrm/json_container.hpp>
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -69,14 +71,12 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
|
|||||||
|
|
||||||
const std::string GetDescriptor() const final { return descriptor_string; }
|
const std::string GetDescriptor() const final { return descriptor_string; }
|
||||||
|
|
||||||
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
|
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
|
||||||
{
|
{
|
||||||
if (!check_all_coordinates(route_parameters.coordinates))
|
if (!check_all_coordinates(route_parameters.coordinates))
|
||||||
{
|
{
|
||||||
reply = http::Reply::StockReply(http::Reply::badRequest);
|
return 400;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
reply.status = http::Reply::ok;
|
|
||||||
|
|
||||||
std::vector<phantom_node_pair> phantom_node_pair_list(route_parameters.coordinates.size());
|
std::vector<phantom_node_pair> phantom_node_pair_list(route_parameters.coordinates.size());
|
||||||
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
|
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
|
||||||
@ -143,7 +143,7 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
|
|||||||
swap_phantom_from_big_cc_into_front);
|
swap_phantom_from_big_cc_into_front);
|
||||||
}
|
}
|
||||||
|
|
||||||
RawRouteData raw_route;
|
InternalRouteResult raw_route;
|
||||||
auto build_phantom_pairs =
|
auto build_phantom_pairs =
|
||||||
[&raw_route](const phantom_node_pair &first_pair, const phantom_node_pair &second_pair)
|
[&raw_route](const phantom_node_pair &first_pair, const phantom_node_pair &second_pair)
|
||||||
{
|
{
|
||||||
@ -183,7 +183,8 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
descriptor->SetConfig(route_parameters);
|
descriptor->SetConfig(route_parameters);
|
||||||
descriptor->Run(raw_route, reply);
|
descriptor->Run(raw_route, json_result);
|
||||||
|
return 200;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ template <class DataFacadeT> class AlternativeRouting final : private BasicRouti
|
|||||||
|
|
||||||
virtual ~AlternativeRouting() {}
|
virtual ~AlternativeRouting() {}
|
||||||
|
|
||||||
void operator()(const PhantomNodes &phantom_node_pair, RawRouteData &raw_route_data)
|
void operator()(const PhantomNodes &phantom_node_pair, InternalRouteResult &raw_route_data)
|
||||||
{
|
{
|
||||||
std::vector<NodeID> alternative_path;
|
std::vector<NodeID> alternative_path;
|
||||||
std::vector<NodeID> via_node_candidate_list;
|
std::vector<NodeID> via_node_candidate_list;
|
||||||
|
@ -28,10 +28,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef ROUTING_BASE_HPP
|
#ifndef ROUTING_BASE_HPP
|
||||||
#define ROUTING_BASE_HPP
|
#define ROUTING_BASE_HPP
|
||||||
|
|
||||||
#include "../data_structures/raw_route_data.hpp"
|
#include "../data_structures/internal_route_result.hpp"
|
||||||
#include "../data_structures/search_engine_data.hpp"
|
#include "../data_structures/search_engine_data.hpp"
|
||||||
#include "../data_structures/turn_instructions.hpp"
|
#include "../data_structures/turn_instructions.hpp"
|
||||||
// #include "../Util/simple_logger.hpp.h"
|
// #include "../Util/simple_logger.hpp"
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ template <class DataFacadeT> class ShortestPathRouting final : public BasicRouti
|
|||||||
|
|
||||||
void operator()(const std::vector<PhantomNodes> &phantom_nodes_vector,
|
void operator()(const std::vector<PhantomNodes> &phantom_nodes_vector,
|
||||||
const std::vector<bool> &uturn_indicators,
|
const std::vector<bool> &uturn_indicators,
|
||||||
RawRouteData &raw_route_data) const
|
InternalRouteResult &raw_route_data) const
|
||||||
{
|
{
|
||||||
int distance1 = 0;
|
int distance1 = 0;
|
||||||
int distance2 = 0;
|
int distance2 = 0;
|
||||||
|
@ -44,7 +44,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <gdal/ogrsf_frmts.h>
|
#include <gdal/ogrsf_frmts.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -27,37 +27,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../Library/OSRM.h"
|
#include "../Library/OSRM.h"
|
||||||
#include "../Util/git_sha.hpp"
|
#include "../Util/git_sha.hpp"
|
||||||
|
#include "../Util/json_renderer.hpp"
|
||||||
#include "../Util/ProgramOptions.h"
|
#include "../Util/ProgramOptions.h"
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
|
|
||||||
#include <osrm/Reply.h>
|
#include <osrm/json_container.hpp>
|
||||||
#include <osrm/RouteParameters.h>
|
#include <osrm/route_parameters.hpp>
|
||||||
#include <osrm/ServerPaths.h>
|
#include <osrm/server_paths.hpp>
|
||||||
|
|
||||||
#include <boost/property_tree/ptree.hpp>
|
|
||||||
#include <boost/property_tree/json_parser.hpp>
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <stack>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
// Dude, real recursions on the OS stack? You must be brave...
|
|
||||||
void print_tree(boost::property_tree::ptree const &property_tree, const unsigned recursion_depth)
|
|
||||||
{
|
|
||||||
auto end = property_tree.end();
|
|
||||||
for (auto tree_iterator = property_tree.begin(); tree_iterator != end; ++tree_iterator)
|
|
||||||
{
|
|
||||||
for (unsigned current_recursion = 0; current_recursion < recursion_depth;
|
|
||||||
++current_recursion)
|
|
||||||
{
|
|
||||||
std::cout << " " << std::flush;
|
|
||||||
}
|
|
||||||
std::cout << tree_iterator->first << ": " << tree_iterator->second.get_value<std::string>()
|
|
||||||
<< std::endl;
|
|
||||||
print_tree(tree_iterator->second, recursion_depth + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, const char *argv[])
|
int main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
@ -68,7 +46,6 @@ int main(int argc, const char *argv[])
|
|||||||
int ip_port, requested_thread_num;
|
int ip_port, requested_thread_num;
|
||||||
bool use_shared_memory = false, trial_run = false;
|
bool use_shared_memory = false, trial_run = false;
|
||||||
ServerPaths server_paths;
|
ServerPaths server_paths;
|
||||||
|
|
||||||
const unsigned init_result = GenerateServerProgramOptions(argc,
|
const unsigned init_result = GenerateServerProgramOptions(argc,
|
||||||
argv,
|
argv,
|
||||||
server_paths,
|
server_paths,
|
||||||
@ -78,11 +55,14 @@ int main(int argc, const char *argv[])
|
|||||||
use_shared_memory,
|
use_shared_memory,
|
||||||
trial_run);
|
trial_run);
|
||||||
|
|
||||||
if (init_result == INIT_FAILED)
|
if (init_result == INIT_OK_DO_NOT_START_ENGINE)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (init_result == INIT_FAILED)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
SimpleLogger().Write() << "starting up engines, " << g_GIT_DESCRIPTION;
|
SimpleLogger().Write() << "starting up engines, " << g_GIT_DESCRIPTION;
|
||||||
|
|
||||||
OSRM routing_machine(server_paths, use_shared_memory);
|
OSRM routing_machine(server_paths, use_shared_memory);
|
||||||
@ -93,7 +73,7 @@ int main(int argc, const char *argv[])
|
|||||||
route_parameters.alternate_route = true; // get an alternate route, too
|
route_parameters.alternate_route = true; // get an alternate route, too
|
||||||
route_parameters.geometry = true; // retrieve geometry of route
|
route_parameters.geometry = true; // retrieve geometry of route
|
||||||
route_parameters.compression = true; // polyline encoding
|
route_parameters.compression = true; // polyline encoding
|
||||||
route_parameters.check_sum = UINT_MAX; // see wiki
|
route_parameters.check_sum = -1; // see wiki
|
||||||
route_parameters.service = "viaroute"; // that's routing
|
route_parameters.service = "viaroute"; // that's routing
|
||||||
route_parameters.output_format = "json";
|
route_parameters.output_format = "json";
|
||||||
route_parameters.jsonp_parameter = ""; // set for jsonp wrapping
|
route_parameters.jsonp_parameter = ""; // set for jsonp wrapping
|
||||||
@ -106,23 +86,10 @@ int main(int argc, const char *argv[])
|
|||||||
// target_coordinate
|
// target_coordinate
|
||||||
route_parameters.coordinates.emplace_back(52.513191 * COORDINATE_PRECISION,
|
route_parameters.coordinates.emplace_back(52.513191 * COORDINATE_PRECISION,
|
||||||
13.415852 * COORDINATE_PRECISION);
|
13.415852 * COORDINATE_PRECISION);
|
||||||
http::Reply osrm_reply;
|
JSON::Object json_result;
|
||||||
routing_machine.RunQuery(route_parameters, osrm_reply);
|
const int result_code = routing_machine.RunQuery(route_parameters, json_result);
|
||||||
|
SimpleLogger().Write() << "http code: " << result_code;
|
||||||
// attention: super-inefficient hack below:
|
JSON::render(SimpleLogger().Write(), json_result);
|
||||||
|
|
||||||
std::stringstream my_stream;
|
|
||||||
for (const auto &element : osrm_reply.content)
|
|
||||||
{
|
|
||||||
std::cout << element;
|
|
||||||
my_stream << element;
|
|
||||||
}
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
boost::property_tree::ptree property_tree;
|
|
||||||
boost::property_tree::read_json(my_stream, property_tree);
|
|
||||||
|
|
||||||
print_tree(property_tree, 0);
|
|
||||||
}
|
}
|
||||||
catch (std::exception ¤t_exception)
|
catch (std::exception ¤t_exception)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user