adding tests for guidance
This commit is contained in:
@@ -122,8 +122,9 @@ double perpendicularDistance(const Coordinate segment_source,
|
||||
BOOST_ASSERT(query_location.IsValid());
|
||||
|
||||
FloatCoordinate projected_nearest;
|
||||
std::tie(ratio, projected_nearest) =
|
||||
projectPointOnSegment(mercator::fromWGS84(segment_source), mercator::fromWGS84(segment_target), mercator::fromWGS84(query_location));
|
||||
std::tie(ratio, projected_nearest) = projectPointOnSegment(mercator::fromWGS84(segment_source),
|
||||
mercator::fromWGS84(segment_target),
|
||||
mercator::fromWGS84(query_location));
|
||||
nearest_location = mercator::toWGS84(projected_nearest);
|
||||
|
||||
const double approximate_distance = greatCircleDistance(query_location, nearest_location);
|
||||
@@ -215,7 +216,9 @@ circleCenter(const Coordinate C1, const Coordinate C2, const Coordinate C3)
|
||||
// free after http://paulbourke.net/geometry/circlesphere/
|
||||
// require three distinct points
|
||||
if (C1 == C2 || C2 == C3 || C1 == C3)
|
||||
{
|
||||
return boost::none;
|
||||
}
|
||||
|
||||
// define line through c1, c2 and c2,c3
|
||||
const double C2C1_lat = static_cast<double>(toFloating(C2.lat - C1.lat)); // yDelta_a
|
||||
@@ -255,7 +258,7 @@ circleCenter(const Coordinate C1, const Coordinate C2, const Coordinate C3)
|
||||
const double C2C1_slope = C2C1_lat / C2C1_lon;
|
||||
const double C3C2_slope = C3C2_lat / C3C2_lon;
|
||||
|
||||
//can this ever happen?
|
||||
// can this ever happen?
|
||||
if (std::abs(C2C1_slope - C3C2_slope) < std::numeric_limits<double>::epsilon())
|
||||
return boost::none;
|
||||
|
||||
@@ -356,12 +359,14 @@ double degreeToPixel(FloatLatitude lat, unsigned zoom)
|
||||
|
||||
FloatCoordinate fromWGS84(const FloatCoordinate &wgs84_coordinate)
|
||||
{
|
||||
return {wgs84_coordinate.lon, FloatLatitude{coordinate_calculation::mercator::latToY(wgs84_coordinate.lat)}};
|
||||
return {wgs84_coordinate.lon,
|
||||
FloatLatitude{coordinate_calculation::mercator::latToY(wgs84_coordinate.lat)}};
|
||||
}
|
||||
|
||||
FloatCoordinate toWGS84(const FloatCoordinate &mercator_coordinate)
|
||||
{
|
||||
return {mercator_coordinate.lon, coordinate_calculation::mercator::yToLat(static_cast<double>(mercator_coordinate.lat))};
|
||||
return {mercator_coordinate.lon,
|
||||
coordinate_calculation::mercator::yToLat(static_cast<double>(mercator_coordinate.lat))};
|
||||
}
|
||||
|
||||
// Converts a WMS tile coordinate (z,x,y) into a wgs bounding box
|
||||
|
||||
+14
-11
@@ -1,10 +1,10 @@
|
||||
#include "util/exception.hpp"
|
||||
#include "util/name_table.hpp"
|
||||
#include "util/simple_logger.hpp"
|
||||
#include "util/exception.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <limits>
|
||||
#include <fstream>
|
||||
#include <limits>
|
||||
|
||||
#include <boost/filesystem/fstream.hpp>
|
||||
|
||||
@@ -17,27 +17,30 @@ NameTable::NameTable(const std::string &filename)
|
||||
{
|
||||
boost::filesystem::ifstream name_stream(filename, std::ios::binary);
|
||||
|
||||
if( !name_stream )
|
||||
if (!name_stream)
|
||||
throw exception("Failed to open " + filename + " for reading.");
|
||||
|
||||
name_stream >> m_name_table;
|
||||
|
||||
unsigned number_of_chars = 0;
|
||||
name_stream.read(reinterpret_cast<char *>(&number_of_chars), sizeof(number_of_chars));
|
||||
if( !name_stream )
|
||||
if (!name_stream)
|
||||
throw exception("Encountered invalid file, failed to read number of contained chars");
|
||||
|
||||
BOOST_ASSERT_MSG(0 != number_of_chars, "name file broken");
|
||||
m_names_char_list.resize(number_of_chars + 1); //+1 gives sentinel element
|
||||
name_stream.read(reinterpret_cast<char *>(&m_names_char_list[0]),
|
||||
number_of_chars * sizeof(m_names_char_list[0]));
|
||||
if( !name_stream )
|
||||
throw exception("Failed to read " + std::to_string(number_of_chars) + " characters from file.");
|
||||
|
||||
if (0 == m_names_char_list.size())
|
||||
m_names_char_list.back() = 0;
|
||||
if (number_of_chars > 0)
|
||||
{
|
||||
name_stream.read(reinterpret_cast<char *>(&m_names_char_list[0]),
|
||||
number_of_chars * sizeof(m_names_char_list[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
util::SimpleLogger().Write(logWARNING) << "list of street names is empty";
|
||||
}
|
||||
if (!name_stream)
|
||||
throw exception("Failed to read " + std::to_string(number_of_chars) +
|
||||
" characters from file.");
|
||||
}
|
||||
|
||||
std::string NameTable::GetNameForID(const unsigned name_id) const
|
||||
|
||||
Reference in New Issue
Block a user