Marble

Coordinate.cpp
1// SPDX-License-Identifier: LGPL-2.1-or-later
2//
3// SPDX-FileCopyrightText: 2011 Dennis Nienhüser <nienhueser@kde.org>
4// SPDX-FileCopyrightText: 2021 Torsten Rahn
5//
6
7#include "Coordinate.h"
8
9#include "MarbleGlobal.h"
10
11using Marble::DEG2RAD;
12using Marble::EARTH_RADIUS;
14
15Coordinate::Coordinate(qreal lon, qreal lat, qreal alt, QObject *parent)
16 : QObject(parent)
17{
18 setLongitude(lon);
19 setLatitude(lat);
20 setAltitude(alt);
21}
22
24{
26}
27
28qreal Coordinate::longitude() const
29{
30 return m_coordinate.longitude(GeoDataCoordinates::Degree);
31}
32
34{
35 m_coordinate.setLongitude(lon, GeoDataCoordinates::Degree);
36 Q_EMIT longitudeChanged();
37}
38
39qreal Coordinate::latitude() const
40{
41 return m_coordinate.latitude(GeoDataCoordinates::Degree);
42}
43
45{
46 m_coordinate.setLatitude(lat, GeoDataCoordinates::Degree);
47 Q_EMIT latitudeChanged();
48}
49
50qreal Coordinate::altitude() const
51{
52 return m_coordinate.altitude();
53}
54
56{
57 m_coordinate.setAltitude(alt);
58 Q_EMIT altitudeChanged();
59}
60
62{
63 return m_coordinate;
64}
65
67{
68 m_coordinate = coordinates;
69}
70
71QString Coordinate::toGeoString(Coordinate::Notation notation, int precision) const
72{
73 return m_coordinate.toString(static_cast<GeoDataCoordinates::Notation>(notation), precision);
74}
75
76qreal Coordinate::distance(qreal longitude, qreal latitude) const
77{
78 GeoDataCoordinates::Unit deg = GeoDataCoordinates::Degree;
79 GeoDataCoordinates other(longitude, latitude, 0, deg);
80 return EARTH_RADIUS * coordinates().sphericalDistanceTo(other);
81}
82
83qreal Coordinate::bearing(qreal longitude, qreal latitude) const
84{
85 qreal deltaLon = longitude * DEG2RAD - m_coordinate.longitude();
86 qreal y = sin(deltaLon) * cos(latitude * DEG2RAD);
87 qreal x = cos(m_coordinate.latitude()) * sin(latitude * DEG2RAD) - sin(m_coordinate.latitude()) * cos(latitude * DEG2RAD) * cos(deltaLon);
88 return Marble::RAD2DEG * atan2(y, x);
89}
90
91bool Coordinate::operator==(const Coordinate &other) const
92{
93 return m_coordinate == other.m_coordinate;
94}
95
96bool Coordinate::operator!=(const Coordinate &other) const
97{
98 return !operator==(other);
99}
100
101Coordinate::Notation Coordinate::defaultNotation()
102{
103 return static_cast<Coordinate::Notation>(GeoDataCoordinates::defaultNotation());
104}
105
106void Coordinate::setDefaultNotation(Coordinate::Notation defaultNotation)
107{
108 if (GeoDataCoordinates::defaultNotation() == static_cast<GeoDataCoordinates::Notation>(defaultNotation))
109 return;
110 GeoDataCoordinates::setDefaultNotation(static_cast<GeoDataCoordinates::Notation>(defaultNotation));
111 Q_EMIT defaultNotationChanged(defaultNotation);
112}
113
114#include "moc_Coordinate.cpp"
Represents a coordinate with the properties of a name and coordinates.
Definition Coordinate.h:19
void setLatitude(qreal lat)
Change the latitude of the coordinate.
Q_INVOKABLE qreal bearing(qreal longitude, qreal latitude) const
Bearing (in degree) to the given coordinate.
Coordinate(qreal lon=0.0, qreal lat=0.0, qreal altitude=0.0, QObject *parent=nullptr)
Constructor.
void setLongitude(qreal lon)
Change the longitude of the coordinate.
void setAltitude(qreal alt)
Change the altitude of the coordinate.
Marble::GeoDataCoordinates coordinates() const
Change the altitude of the coordinate.
void setCoordinates(const Marble::GeoDataCoordinates &coordinates)
Change all coordinates at once.
Q_INVOKABLE qreal distance(qreal longitude, qreal latitude) const
Distance (in meter) to the given coordinate.
A 3d point representation.
void setLatitude(qreal lat, GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian)
set the longitude in a GeoDataCoordinates object
void setAltitude(const qreal altitude)
set the altitude of the Point in meters
qreal altitude() const
return the altitude of the Point in meters
void setLongitude(qreal lon, GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian)
set the longitude in a GeoDataCoordinates object
qreal sphericalDistanceTo(const GeoDataCoordinates &other) const
This method calculates the shortest distance between two points on a sphere.
QString toString() const
return a string representation of the coordinate this is a convenience function which uses the defaul...
Q_EMITQ_EMIT
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Nov 8 2024 12:02:42 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.