File indexing completed on 2024-04-28 15:39:05

0001 // SPDX-FileCopyrightText: 2020 Tobias Leupold <tl at stonemx dot de>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 // Local includes
0006 #include "CoordinatesFormatter.h"
0007 #include "KGeoTag.h"
0008 #include "Coordinates.h"
0009 
0010 // KDE includes
0011 #include <KLocalizedString>
0012 
0013 // Qt includes
0014 #include <QLocale>
0015 
0016 // C++ includes
0017 #include <cmath>
0018 
0019 CoordinatesFormatter::CoordinatesFormatter(QObject *parent, QLocale *locale)
0020     : QObject(parent),
0021       m_locale(locale)
0022 {
0023 }
0024 
0025 QString CoordinatesFormatter::formatLonLat(double value) const
0026 {
0027     return m_locale->toString(std::abs(value), 'f', KGeoTag::degreesPrecision);
0028 }
0029 
0030 QString CoordinatesFormatter::lon(const Coordinates &coordinates) const
0031 {
0032     return i18nc("Formatted longitude with a cardinal direction", "%1° %2",
0033                  formatLonLat(coordinates.lon()),
0034                  coordinates.lon() >= 0 ? i18nc("Abbreviated cardinal direction \"East\"", "E")
0035                                         : i18nc("Abbreviated cardinal direction \"West\"", "W"));
0036 }
0037 
0038 QString CoordinatesFormatter::lat(const Coordinates &coordinates) const
0039 {
0040     return i18nc("Formatted latitude with a cardinal direction", "%1° %2",
0041                  formatLonLat(coordinates.lat()),
0042                  coordinates.lat() >= 0 ? i18nc("Abbreviated cardinal direction \"North\"", "N")
0043                                         : i18nc("Abbreviated cardinal direction \"South\"", "S"));
0044 }
0045 
0046 QString CoordinatesFormatter::alt(const Coordinates &coordinates) const
0047 {
0048     return m_locale->toString(coordinates.alt(), 'f', KGeoTag::altitudePrecision);
0049 }