1 #ifndef OSMIUM_OSM_LOCATION_HPP
2 #define OSMIUM_OSM_LOCATION_HPP
56 std::range_error(what) {
60 std::range_error(what) {
95 return static_cast<int32_t
>(std::round(c * coordinate_precision));
99 return static_cast<double>(c) / coordinate_precision;
106 m_x(undefined_coordinate),
107 m_y(undefined_coordinate) {
115 constexpr
Location(
const int32_t
x,
const int32_t
y) noexcept :
125 constexpr
Location(
const int64_t
x,
const int64_t
y) noexcept :
126 m_x(static_cast<int32_t>(
x)),
127 m_y(static_cast<int32_t>(
y)) {
148 explicit constexpr
operator bool() const noexcept {
156 constexpr
bool valid() const noexcept {
157 return m_x >= -180 * coordinate_precision
158 && m_x <= 180 * coordinate_precision
159 && m_y >= -90 * coordinate_precision
163 constexpr int32_t
x() const noexcept {
167 constexpr int32_t
y() const noexcept {
229 template <
typename T>
232 *iterator++ = separator;
242 return lhs.x() == rhs.x() && lhs.y() == rhs.y();
246 return ! (lhs == rhs);
255 return (lhs.x() == rhs.x() && lhs.y() < rhs.y()) || lhs.x() < rhs.x();
263 return ! (rhs < lhs);
267 return ! (lhs < rhs);
273 template <
typename TChar,
typename TTraits>
274 inline std::basic_ostream<TChar, TTraits>& operator<<(std::basic_ostream<TChar, TTraits>& out,
const osmium::Location& location) {
276 out <<
'(' << location.
lon() <<
',' << location.lat() <<
')';
278 out <<
"(undefined,undefined)";
285 #endif // OSMIUM_OSM_LOCATION_HPP
double lat_without_check() const
Definition: location.hpp:215
static int32_t double_to_fix(const double c) noexcept
Definition: location.hpp:94
Location & operator=(const Location &)=default
bool operator<=(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:446
Location & set_lon(double lon) noexcept
Definition: location.hpp:219
Definition: reader_iterator.hpp:39
constexpr Location(const int64_t x, const int64_t y) noexcept
Definition: location.hpp:125
constexpr Location(const int32_t x, const int32_t y) noexcept
Definition: location.hpp:115
T double2string(T iterator, double value, int precision)
Definition: double.hpp:59
static OSMIUM_CONSTEXPR double fix_to_double(const int32_t c) noexcept
Definition: location.hpp:98
OSMIUM_CONSTEXPR bool operator==(const Box &lhs, const Box &rhs) noexcept
Definition: box.hpp:219
double lat() const
Definition: location.hpp:205
static constexpr int coordinate_precision
Definition: location.hpp:92
bool operator<(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:438
double lon_without_check() const
Definition: location.hpp:196
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
Definition: location.hpp:53
int32_t m_y
Definition: location.hpp:82
invalid_location(const std::string &what)
Definition: location.hpp:55
T as_string(T iterator, const char separator) const
Definition: location.hpp:230
Location & set_lat(double lat) noexcept
Definition: location.hpp:224
Location & set_y(const int32_t y) noexcept
Definition: location.hpp:176
constexpr bool valid() const noexcept
Definition: location.hpp:156
Definition: location.hpp:79
int32_t m_x
Definition: location.hpp:81
Location & set_x(const int32_t x) noexcept
Definition: location.hpp:171
bool operator>=(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:450
double lon() const
Definition: location.hpp:186
#define OSMIUM_CONSTEXPR
Definition: compatibility.hpp:43
bool operator>(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:442
invalid_location(const char *what)
Definition: location.hpp:59
constexpr int32_t x() const noexcept
Definition: location.hpp:163
static constexpr int32_t undefined_coordinate
Definition: location.hpp:90
Location(const double lon, const double lat)
Definition: location.hpp:133
bool operator!=(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:431
constexpr int32_t y() const noexcept
Definition: location.hpp:167
constexpr Location() noexcept
Definition: location.hpp:105