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
12using Marble::EARTH_RADIUS;
13using Marble::DEG2RAD;
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
33void Coordinate::setLongitude( qreal lon )
34{
35 m_coordinate.setLongitude( lon, GeoDataCoordinates::Degree );
36 emit longitudeChanged();
37}
38
39qreal Coordinate::latitude() const
40{
41 return m_coordinate.latitude( GeoDataCoordinates::Degree );
42}
43
44void Coordinate::setLatitude( qreal lat )
45{
46 m_coordinate.setLatitude( lat, GeoDataCoordinates::Degree );
47 emit latitudeChanged();
48}
49
50qreal Coordinate::altitude() const
51{
52 return m_coordinate.altitude();
53}
54
55void Coordinate::setAltitude( qreal alt )
56{
57 m_coordinate.setAltitude( alt );
58 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 ) -
88 sin( m_coordinate.latitude() ) * cos( latitude * DEG2RAD ) * cos( deltaLon );
89 return Marble::RAD2DEG * atan2( y, x );
90}
91
92bool Coordinate::operator == ( const Coordinate &other ) const
93{
94 return m_coordinate == other.m_coordinate;
95}
96
97bool Coordinate::operator != ( const Coordinate &other ) const
98{
99 return !operator == ( other );
100}
101
102Coordinate::Notation Coordinate::defaultNotation()
103{
104 return static_cast<Coordinate::Notation>(GeoDataCoordinates::defaultNotation());
105}
106
107void Coordinate::setDefaultNotation(Coordinate::Notation defaultNotation)
108{
109 if (GeoDataCoordinates::defaultNotation() == static_cast<GeoDataCoordinates::Notation>(defaultNotation))
110 return;
111 GeoDataCoordinates::setDefaultNotation(static_cast<GeoDataCoordinates::Notation>(defaultNotation));
112 emit defaultNotationChanged(defaultNotation);
113}
114
115#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
qreal longitude(GeoDataCoordinates::Unit unit) const
retrieves the longitude of the GeoDataCoordinates object use the unit parameter to switch between Rad...
void setLongitude(qreal lon, GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian)
set the longitude in a GeoDataCoordinates object
qreal latitude(GeoDataCoordinates::Unit unit) const
retrieves the latitude of the GeoDataCoordinates object use the unit parameter to switch between Radi...
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...
T qobject_cast(QObject *object)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Jun 21 2024 12:00:06 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.