Marble

GeoDataLatLonAltBox.h
1// SPDX-License-Identifier: LGPL-2.1-or-later
2//
3// SPDX-FileCopyrightText: 2007 Andrew Manson <g.real.ate@gmail.com>
4// SPDX-FileCopyrightText: 2008 Torsten Rahn <rahn@kde.org>
5//
6
7#ifndef MARBLE_GEODATALATLONALTBOX_H
8#define MARBLE_GEODATALATLONALTBOX_H
9
10#include "MarbleGlobal.h"
11
12#include "geodata_export.h"
13
14#include "GeoDataLatLonBox.h"
15
16#include <QHash>
17
18namespace Marble
19{
20
21class GeoDataLatLonAltBoxPrivate;
22
24
25/**
26 * @short A class that defines a 3D bounding box for geographic data.
27 *
28 * GeoDataLatLonAltBox is a 3D bounding box that describes a geographic area
29 * in terms of latitude, longitude and altitude.
30 *
31 * The bounding box gets described by assigning the northern, southern,
32 * eastern and western boundary.
33 * So usually the value of the eastern boundary is bigger than the
34 * value of the western boundary. Only if the bounding box crosses the
35 * date line then the eastern boundary has got a smaller value than
36 * the western one.
37 */
38
39class GEODATA_EXPORT GeoDataLatLonAltBox : public GeoDataLatLonBox
40{
41 friend bool GEODATA_EXPORT operator==(GeoDataLatLonAltBox const &lhs, GeoDataLatLonAltBox const &rhs);
42
43public:
44 GeoDataLatLonAltBox();
45 GeoDataLatLonAltBox(const GeoDataLatLonAltBox &other);
46 GeoDataLatLonAltBox(const GeoDataLatLonBox &other, qreal minAltitude, qreal maxAltitude);
47 /**
48 * @brief A LatLonAltBox with the data from a GeoDataCoordinate
49 * This way of creating a GeoDataLatLonAltBox sets the north and south
50 * values of this box to the Latitude value in the GeoDataCoordinate,
51 * resulting in a Box that has a 0 Area. This is useful for building
52 * LatLonAltBoxes from GeoDataCoordinates.
53 */
54 explicit GeoDataLatLonAltBox(const GeoDataCoordinates &coordinates);
55
56 ~GeoDataLatLonAltBox() override;
57
58 GeoDataLatLonAltBox &operator=(const GeoDataLatLonAltBox &other);
59 GeoDataLatLonAltBox &operator=(const GeoDataCoordinates &other);
60
61 /// Provides type information for downcasting a GeoData
62 const char *nodeType() const override;
63
64 /**
65 * @brief qHash, for using GeoDataLatLonAltBox in a QCache as Key
66 * @return the hash of the GeoDataLatLonAltBox
67 */
68 uint qHash(const GeoDataLatLonAltBox &);
69
70 /**
71 * @brief Get the lower altitude boundary of the bounding box.
72 * @return the height of the lower altitude boundary in meters.
73 */
74 qreal minAltitude() const;
75 void setMinAltitude(const qreal minAltitude);
76
77 /**
78 * @brief Get the upper altitude boundary of the bounding box.
79 * @return the height of the upper altitude boundary in meters.
80 */
81 qreal maxAltitude() const;
82 void setMaxAltitude(const qreal maxAltitude);
83
84 /**
85 * @brief Get the reference system for the altitude.
86 * @return the point of reference which marks the origin
87 * for measuring the altitude.
88 */
90 void setAltitudeMode(const AltitudeMode altitudeMode);
91
92 bool contains(const GeoDataCoordinates &) const override;
93 bool contains(const GeoDataLatLonAltBox &) const;
94
95 /**
96 * @brief Check if this GeoDataLatLonAltBox intersects with the given one.
97 */
98 virtual bool intersects(const GeoDataLatLonAltBox &) const;
99
100 using GeoDataLatLonBox::intersects;
101
102 /**
103 * @brief Create the smallest bounding box from a line string.
104 * @return the smallest bounding box that contains the linestring.
105 */
106 static GeoDataLatLonAltBox fromLineString(const GeoDataLineString &lineString);
107
108 /**
109 * @brief Indicates whether the bounding box only contains a single 2D point ("singularity").
110 * @return Return value is true if the height and the width of the bounding box equal zero.
111 */
112 bool isNull() const override;
113
114 /**
115 * @brief Resets the bounding box to its uninitialised state (and thus contains nothing).
116 */
117 void clear() override;
118
119 /**
120 * @brief returns the center of this box
121 * @return a coordinate, body-center of the box
122 */
123 GeoDataCoordinates center() const override;
124
125 /// Serialize the contents of the feature to @p stream.
126 void pack(QDataStream &stream) const override;
127 /// Unserialize the contents of the feature from @p stream.
128 void unpack(QDataStream &stream) override;
129
130private:
131 GeoDataLatLonAltBoxPrivate *const d;
132};
133
134uint GEODATA_EXPORT qHash(const GeoDataLatLonAltBox &box, uint seed = 0);
135
136bool GEODATA_EXPORT operator==(GeoDataLatLonAltBox const &lhs, GeoDataLatLonAltBox const &rhs);
137
138}
139
140Q_DECLARE_METATYPE(Marble::GeoDataLatLonAltBox)
141
142#endif
A 3d point representation.
A class that defines a 3D bounding box for geographic data.
qreal minAltitude() const
Get the lower altitude boundary of the bounding box.
void clear() override
Resets the bounding box to its uninitialised state (and thus contains nothing).
const char * nodeType() const override
Provides type information for downcasting a GeoData.
uint qHash(const GeoDataLatLonAltBox &)
qHash, for using GeoDataLatLonAltBox in a QCache as Key
void unpack(QDataStream &stream) override
Unserialize the contents of the feature from stream.
virtual bool intersects(const GeoDataLatLonAltBox &) const
Check if this GeoDataLatLonAltBox intersects with the given one.
bool isNull() const override
Indicates whether the bounding box only contains a single 2D point ("singularity").
qreal maxAltitude() const
Get the upper altitude boundary of the bounding box.
static GeoDataLatLonAltBox fromLineString(const GeoDataLineString &lineString)
Create the smallest bounding box from a line string.
GeoDataCoordinates center() const override
returns the center of this box
AltitudeMode altitudeMode() const
Get the reference system for the altitude.
void pack(QDataStream &stream) const override
Serialize the contents of the feature to stream.
A LineString that allows to store a contiguous set of line segments.
Binds a QML item to a specific geodetic location in screen coordinates.
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Jan 24 2025 11:52:09 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.