2 Situare - A location system for Facebook
3 Copyright (C) 2010 Ixonos Plc. Authors:
5 Sami Rämö - sami.ramo@ixonos.com
7 Situare is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 version 2 as published by the Free Software Foundation.
11 Situare is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with Situare; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
23 #ifndef SCENECOORDINATE_H
24 #define SCENECOORDINATE_H
32 * @brief Scene coordinate
34 * @author Sami Rämö - sami.ramo@ixonos.com
40 * @brief Constructs a null coordinate
45 * @brief Constructs a coordinate with given x and y
50 SceneCoordinate(double x, double y);
53 * @brief Constructs a coordinate with values converted from the given GeoCoordinate
55 * Uses convertFrom() method.
57 * @param coordinate Geological coordinate
59 SceneCoordinate(const GeoCoordinate &coordinate);
61 /*******************************************************************************
62 * MEMBER FUNCTIONS AND SLOTS
63 ******************************************************************************/
66 * @brief Returns the azimuth from this coordinate to other coordinate
68 * Zero is pointing to north. Returned value is from 0 to 360.
70 * @param to Target coordinate
71 * @returns Azimuth in degrees
73 qreal azimuthTo(const SceneCoordinate &to) const;
76 * @brief Check if coordinate is (0.0, 0.0)
78 * @returns True if both X and Y are 0.0, otherwise false
83 * @brief Sets the latitude
90 * @brief Sets the longitude
97 * @brief Convert to QPointF
99 * @returns a QPointF object
101 QPointF toPointF() const;
104 * @brief Returns the x value
111 * @brief Returns the y value
119 * @brief Convert values from GeoCoordinate
121 * Does run normalize() for the x value after the conversion to make sure that the result
122 * is inside the allowed map pixel values.
124 * In horizontal direction:
125 * -180º equals scene pixel 0 (first scene pixel)
128 * scene has 2^18 * 256 - 1 = 67108864 pixels per side
129 * one pixel width is 360º / 67108864 = 0.00000536441802978516º
130 * so the last scene pixel is 180º - 0.00000536441802978516º = 179.99999463558197021484º
132 * @param coordinate Geological coordinate
134 void convertFrom(const GeoCoordinate &coordinate);
137 * @brief Translate integer part of the given value between min and max
139 * If given value is not inside the given range (min <= value <= max), then the allowed range
140 * is adder or subtracted until the value does fit in the range. Only integer part is compared.
142 * @param value Value to be normalized
143 * @param min Minimum allowed value
144 * @param max Maximum allowed value
146 void normalize(double &value, int min, int max);
148 /*******************************************************************************
150 ******************************************************************************/
152 double m_x; ///< X value
153 double m_y; ///< Y value
155 /*******************************************************************************
157 ******************************************************************************/
160 * @brief Operator for creating QVariant
162 operator QVariant() const;
165 * @brief Multiplies this coordinate's values by the given factor, and returns a reference
166 * to this coordinate.
168 SceneCoordinate & operator*=(double factor);
171 * @brief Adds the given coordinate to this coordinate and returns a reference to this
174 SceneCoordinate & operator+=(const SceneCoordinate &coordinate);
177 * @brief Subtracts the given coordinate from this coordinate and returns a reference to this
180 SceneCoordinate & operator-=(const SceneCoordinate &coordinate);
183 * @brief Returns a SceneCoordinate object that is the sum of the coordinates.
185 const SceneCoordinate operator+(const SceneCoordinate &other) const;
188 * @brief Returns a SceneCoordinate object that is formed by subtracting the coordinates.
190 const SceneCoordinate operator-(const SceneCoordinate &other) const;
194 * @brief Operator for writing the coordinate to QDebug stream.
196 QDebug operator<<(QDebug dbg, const SceneCoordinate &coordinate);
199 * @brief Returns a SceneCoordinate object that is multiplied by the given factor.
201 const SceneCoordinate operator*(double factor, const SceneCoordinate &coordinate);
203 Q_DECLARE_METATYPE(SceneCoordinate)
205 #endif // SCENECOORDINATE_H