diff --git a/CMakeLists.txt b/CMakeLists.txt index 02a353564..bccab776e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,15 +57,16 @@ add_library(IMPORT OBJECT ${ImporterGlob}) add_library(LOGGER OBJECT Util/simple_logger.cpp) add_library(PHANTOMNODE OBJECT data_structures/phantom_node.cpp) add_library(EXCEPTION OBJECT Util/osrm_exception.cpp) +add_library(MERCATOR OBJECT Util/mercator.cpp) set(ExtractorSources extract.cpp ${ExtractorGlob}) -add_executable(osrm-extract ${ExtractorSources} $ $ $ $ $ $) +add_executable(osrm-extract ${ExtractorSources} $ $ $ $ $ $ $) add_library(RESTRICTION OBJECT data_structures/restriction_map.cpp) file(GLOB PrepareGlob contractor/*.cpp data_structures/hilbert_value.cpp Util/compute_angle.cpp {RestrictionMapGlob}) set(PrepareSources prepare.cpp ${PrepareGlob}) -add_executable(osrm-prepare ${PrepareSources} $ $ $ $ $ $ $) +add_executable(osrm-prepare ${PrepareSources} $ $ $ $ $ $ $ $) file(GLOB ServerGlob Server/*.cpp) file(GLOB DescriptorGlob descriptors/*.cpp) @@ -90,11 +91,11 @@ set( add_library(COORDINATE OBJECT ${CoordinateGlob}) add_library(FINGERPRINT OBJECT Util/fingerprint.cpp) add_library(GITDESCRIPTION OBJECT Util/git_sha.cpp) -add_library(OSRM ${OSRMSources} $ $ $ $ $ $) +add_library(OSRM ${OSRMSources} $ $ $ $ $ $ $) add_dependencies(FINGERPRINT FingerPrintConfigure) add_executable(osrm-routed routed.cpp ${ServerGlob} $) -add_executable(osrm-datastore datastore.cpp $ $ $ $ $) +add_executable(osrm-datastore datastore.cpp $ $ $ $ $ $) # Unit tests add_executable(datastructure-tests EXCLUDE_FROM_ALL UnitTests/datastructure_tests.cpp ${DataStructureTestsGlob} $ $ $ $) @@ -289,7 +290,7 @@ if(WITH_TOOLS OR BUILD_TOOLS) message(STATUS "Activating OSRM internal tools") find_package(GDAL) if(GDAL_FOUND) - add_executable(osrm-components tools/components.cpp $ $ $ $ $ $) + add_executable(osrm-components tools/components.cpp $ $ $ $ $ $ $) target_link_libraries(osrm-components ${TBB_LIBRARIES}) include_directories(${GDAL_INCLUDE_DIR}) target_link_libraries( diff --git a/Util/compute_angle.cpp b/Util/compute_angle.cpp index bba4773e2..ca9d18980 100644 --- a/Util/compute_angle.cpp +++ b/Util/compute_angle.cpp @@ -1,6 +1,6 @@ /* -Copyright (c) 2013, Project OSRM, Dennis Luxen, others +Copyright (c) 2015, Project OSRM, Dennis Luxen, others All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "compute_angle.hpp" #include "TrigonometryTables.h" -#include "../Util/MercatorUtil.h" +#include "../Util/mercator.hpp" #include @@ -39,9 +39,9 @@ double ComputeAngle::OfThreeFixedPointCoordinates(const FixedPointCoordinate &A, const FixedPointCoordinate &B) { const double v1x = (A.lon - C.lon) / COORDINATE_PRECISION; - const double v1y = lat2y(A.lat / COORDINATE_PRECISION) - lat2y(C.lat / COORDINATE_PRECISION); + const double v1y = mercator::lat2y(A.lat / COORDINATE_PRECISION) - mercator::lat2y(C.lat / COORDINATE_PRECISION); const double v2x = (B.lon - C.lon) / COORDINATE_PRECISION; - const double v2y = lat2y(B.lat / COORDINATE_PRECISION) - lat2y(C.lat / COORDINATE_PRECISION); + const double v2y = mercator::lat2y(B.lat / COORDINATE_PRECISION) - mercator::lat2y(C.lat / COORDINATE_PRECISION); double angle = (atan2_lookup(v2y, v2x) - atan2_lookup(v1y, v1x)) * 180. / M_PI; while (angle < 0.) diff --git a/Util/MercatorUtil.h b/Util/mercator.cpp similarity index 87% rename from Util/MercatorUtil.h rename to Util/mercator.cpp index b4a15b779..707fd5535 100644 --- a/Util/MercatorUtil.h +++ b/Util/mercator.cpp @@ -1,6 +1,6 @@ /* -Copyright (c) 2013, Project OSRM, Dennis Luxen, others +Copyright (c) 2015, Project OSRM, Dennis Luxen, others All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -25,19 +25,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef MERCATOR_UTIL_H -#define MERCATOR_UTIL_H +#include "mercator.hpp" #include -inline double y2lat(const double a) +double mercator::y2lat(const double a) { return 180. * M_1_PI * (2. * std::atan(std::exp(a * M_PI / 180.)) - M_PI_2); } -inline double lat2y(const double a) +double mercator::lat2y(const double a) { return 180. * M_1_PI * std::log(std::tan(M_PI_4 + a * (M_PI / 180.) / 2.)); } - -#endif // MERCATOR_UTIL_H diff --git a/Util/mercator.hpp b/Util/mercator.hpp new file mode 100644 index 000000000..0ea22d034 --- /dev/null +++ b/Util/mercator.hpp @@ -0,0 +1,38 @@ +/* + +Copyright (c) 2015, 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 MERCATOR_HPP +#define MERCATOR_HPP + +struct mercator +{ + static double y2lat(const double a); + + static double lat2y(const double a); +}; + +#endif // MERCATOR_HPP diff --git a/data_structures/coordinate.cpp b/data_structures/coordinate.cpp index c2563b663..2d045e195 100644 --- a/data_structures/coordinate.cpp +++ b/data_structures/coordinate.cpp @@ -25,7 +25,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "../Util/MercatorUtil.h" +#include "../Util/mercator.hpp" #ifndef NDEBUG #include "../Util/simple_logger.hpp" #endif @@ -160,11 +160,11 @@ FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordinate &s const FixedPointCoordinate &point) { // initialize values - const float x_value = static_cast(lat2y(point.lat / COORDINATE_PRECISION)); + const float x_value = static_cast(mercator::lat2y(point.lat / COORDINATE_PRECISION)); const float y_value = point.lon / COORDINATE_PRECISION; - float a = static_cast(lat2y(source_coordinate.lat / COORDINATE_PRECISION)); + float a = static_cast(mercator::lat2y(source_coordinate.lat / COORDINATE_PRECISION)); float b = source_coordinate.lon / COORDINATE_PRECISION; - float c = static_cast(lat2y(target_coordinate.lat / COORDINATE_PRECISION)); + float c = static_cast(mercator::lat2y(target_coordinate.lat / COORDINATE_PRECISION)); float d = target_coordinate.lon / COORDINATE_PRECISION; float p, q; if (std::abs(a - c) > std::numeric_limits::epsilon()) @@ -243,7 +243,7 @@ FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordinate &s } else { // point lies in between - nearest_location.lat = static_cast(y2lat(p) * COORDINATE_PRECISION); + nearest_location.lat = static_cast(mercator::y2lat(p) * COORDINATE_PRECISION); nearest_location.lon = static_cast(q * COORDINATE_PRECISION); } @@ -260,11 +260,11 @@ float FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordin BOOST_ASSERT(query_location.is_valid()); // initialize values - const double x = lat2y(query_location.lat / COORDINATE_PRECISION); + const double x = mercator::lat2y(query_location.lat / COORDINATE_PRECISION); const double y = query_location.lon / COORDINATE_PRECISION; - const double a = lat2y(segment_source.lat / COORDINATE_PRECISION); + const double a = mercator::lat2y(segment_source.lat / COORDINATE_PRECISION); const double b = segment_source.lon / COORDINATE_PRECISION; - const double c = lat2y(segment_target.lat / COORDINATE_PRECISION); + const double c = mercator::lat2y(segment_target.lat / COORDINATE_PRECISION); const double d = segment_target.lon / COORDINATE_PRECISION; double p, q /*,mX*/, nY; if (std::abs(a - c) > std::numeric_limits::epsilon()) @@ -317,7 +317,7 @@ float FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordin else { // point lies in between - nearest_location.lat = static_cast(y2lat(p) * COORDINATE_PRECISION); + nearest_location.lat = static_cast(mercator::y2lat(p) * COORDINATE_PRECISION); nearest_location.lon = static_cast(q * COORDINATE_PRECISION); } BOOST_ASSERT(nearest_location.is_valid()); @@ -430,11 +430,11 @@ int FixedPointCoordinate::OrderedPerpendicularDistanceApproximation( const FixedPointCoordinate &segment_target) { // initialize values - const float x = static_cast(lat2y(input_point.lat / COORDINATE_PRECISION)); + const float x = static_cast(mercator::lat2y(input_point.lat / COORDINATE_PRECISION)); const float y = input_point.lon / COORDINATE_PRECISION; - const float a = static_cast(lat2y(segment_source.lat / COORDINATE_PRECISION)); + const float a = static_cast(mercator::lat2y(segment_source.lat / COORDINATE_PRECISION)); const float b = segment_source.lon / COORDINATE_PRECISION; - const float c = static_cast(lat2y(segment_target.lat / COORDINATE_PRECISION)); + const float c = static_cast(mercator::lat2y(segment_target.lat / COORDINATE_PRECISION)); const float d = segment_target.lon / COORDINATE_PRECISION; float p, q; @@ -476,7 +476,7 @@ int FixedPointCoordinate::OrderedPerpendicularDistanceApproximation( { // point lies in between dx = input_point.lon - static_cast(q * COORDINATE_PRECISION); - dy = input_point.lat - static_cast(y2lat(p) * COORDINATE_PRECISION); + dy = input_point.lat - static_cast(mercator::y2lat(p) * COORDINATE_PRECISION); } // return an approximation in the plane diff --git a/data_structures/static_rtree.hpp b/data_structures/static_rtree.hpp index db7180468..a8cccd1bf 100644 --- a/data_structures/static_rtree.hpp +++ b/data_structures/static_rtree.hpp @@ -38,7 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "../Util/floating_point.hpp" #include "../Util/integer_range.hpp" -#include "../Util/MercatorUtil.h" +#include "../Util/mercator.hpp" #include "../Util/osrm_exception.hpp" #include "../Util/simple_logger.hpp" #include "../Util/timing_util.hpp" @@ -377,7 +377,7 @@ class StaticRTree FixedPointCoordinate(coordinate_list.at(current_element.v).lat, coordinate_list.at(current_element.v).lon)); current_centroid.lat = - COORDINATE_PRECISION * lat2y(current_centroid.lat / COORDINATE_PRECISION); + COORDINATE_PRECISION * mercator::lat2y(current_centroid.lat / COORDINATE_PRECISION); current_wrapper.m_hilbert_value = get_hilbert_number(current_centroid); }