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 Check if coordinate is (0.0, 0.0)
68 * @returns True if both X and Y are 0.0, otherwise false
73 * @brief Sets the latitude
80 * @brief Sets the longitude
86 QPointF toPointF() const;
89 * @brief Returns the x value
96 * @brief Returns the y value
104 * @brief Convert values from GeoCoordinate
106 * Does run normalize() for the x value after the conversion to make sure that the result
107 * is inside the allowed map pixel values.
109 * In horizontal direction:
110 * -180º equals scene pixel 0 (first scene pixel)
113 * scene has 2^18 * 256 - 1 = 67108864 pixels per side
114 * one pixel width is 360º / 67108864 = 0.00000536441802978516º
115 * so the last scene pixel is 180º - 0.00000536441802978516º = 179.99999463558197021484º *
117 * @param coordinate Geological coordinate
119 void convertFrom(const GeoCoordinate &coordinate);
122 * @brief Translate integer part of the given value between min and max
124 * If given value is not inside the given range (min <= value <= max), then the allowed range
125 * is adder or subtracted until the value does fit in the range. Only integer part is compared.
127 * @param value Value to be normalized
128 * @param min Minimum allowed value
129 * @param max Maximum allowed value
131 void normalize(double &value, int min, int max);
133 /*******************************************************************************
135 ******************************************************************************/
137 double m_x; ///< X value
138 double m_y; ///< Y value
141 QDebug operator<<(QDebug dbg, const SceneCoordinate &c);
143 Q_DECLARE_METATYPE(SceneCoordinate)
145 #endif // SCENECOORDINATE_H