File indexing completed on 2025-03-09 03:57:06

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2010-05-23
0007  * Description : position information keys
0008  *
0009  * SPDX-FileCopyrightText: 2009-2012 by Andi Clemens <andi dot clemens at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #include "positionkeys.h"
0016 
0017 // KDE includes
0018 
0019 #include <klocalizedstring.h>
0020 
0021 // Local includes
0022 
0023 #include "coredbinfocontainers.h"
0024 #include "iteminfo.h"
0025 #include "itemposition.h"
0026 
0027 namespace
0028 {
0029 static const QString KEY_LATITUDE(QLatin1String("Latitude"));
0030 static const QString KEY_LONGITUDE(QLatin1String("Longitude"));
0031 static const QString KEY_LATTITUDENUMBER(QLatin1String("LatitudeNumber"));
0032 static const QString KEY_LONGITUDENUMBER(QLatin1String("LongitudeNumber"));
0033 static const QString KEY_LATITUDEFORMATTED(QLatin1String("LatitudeFormatted"));
0034 static const QString KEY_LONGITUDEFORMATTED(QLatin1String("LongitudeFormatted"));
0035 static const QString KEY_ALTITUDE(QLatin1String("Altitude"));
0036 static const QString KEY_ALTITUDEFORMATTED(QLatin1String("AltitudeFormatted"));
0037 static const QString KEY_ORIENTATION(QLatin1String("Orientation"));
0038 static const QString KEY_ROLL(QLatin1String("Roll"));
0039 static const QString KEY_TILT(QLatin1String("Tilt"));
0040 static const QString KEY_ACCURACY(QLatin1String("Accuracy"));
0041 static const QString KEY_DESCRIPTION(QLatin1String("Description"));
0042 }
0043 
0044 namespace Digikam
0045 {
0046 
0047 PositionKeys::PositionKeys()
0048     : DbKeysCollection(i18n("Position Information (GPS)"))
0049 {
0050     addId(KEY_LATITUDE,           i18n("Latitude in the format as described by the XMP specification"));
0051     addId(KEY_LONGITUDE,          i18n("Longitude in the format as described by the XMP specification"));
0052     addId(KEY_LATTITUDENUMBER,    i18n("Latitude as double value"));
0053     addId(KEY_LONGITUDENUMBER,    i18n("Longitude as double value"));
0054     addId(KEY_LATITUDEFORMATTED,  i18n("Latitude in a human readable form"));
0055     addId(KEY_LONGITUDEFORMATTED, i18n("Longitude in a human readable form"));
0056     addId(KEY_ALTITUDE,           i18n("Altitude in meters"));
0057     addId(KEY_ALTITUDEFORMATTED,  i18n("Altitude in a human readable form"));
0058     addId(KEY_ORIENTATION,        i18n("Orientation"));
0059     addId(KEY_ROLL,               i18n("Roll"));        /** @todo better description! */
0060     addId(KEY_TILT,               i18n("Tilt"));        /** @todo better description! */
0061     addId(KEY_ACCURACY,           i18n("Accuracy"));    /** @todo better description! */
0062     addId(KEY_DESCRIPTION,        i18n("Description")); /** @todo better description! */
0063 }
0064 
0065 QString PositionKeys::getDbValue(const QString& key, ParseSettings& settings)
0066 {
0067     ItemInfo info         = ItemInfo::fromUrl(settings.fileUrl);
0068     ItemPosition position = info.imagePosition();
0069 
0070     QString result;
0071 
0072     if      (key == KEY_LATITUDE)
0073     {
0074         result = position.latitude().simplified();
0075     }
0076     else if (key == KEY_LONGITUDE)
0077     {
0078         result = position.longitude().simplified();
0079     }
0080     else if (key == KEY_LATTITUDENUMBER)
0081     {
0082         result = QString::number(position.latitudeNumber());
0083     }
0084     else if (key == KEY_LONGITUDENUMBER)
0085     {
0086         result = QString::number(position.longitudeNumber());
0087     }
0088     else if (key == KEY_LATITUDEFORMATTED)
0089     {
0090         result = position.latitudeFormatted().simplified();
0091     }
0092     else if (key == KEY_LONGITUDEFORMATTED)
0093     {
0094         result = position.longitudeFormatted().simplified();
0095     }
0096     else if (key == KEY_ALTITUDE)
0097     {
0098         result = QString::number(position.altitude());
0099     }
0100     else if (key == KEY_ALTITUDEFORMATTED)
0101     {
0102         result = position.altitudeFormatted().simplified();
0103     }
0104     else if (key == KEY_ORIENTATION)
0105     {
0106         result = QString::number(position.orientation());
0107     }
0108     else if (key == KEY_ROLL)
0109     {
0110         result = QString::number(position.roll());
0111     }
0112     else if (key == KEY_TILT)
0113     {
0114         result = QString::number(position.tilt());
0115     }
0116     else if (key == KEY_ACCURACY)
0117     {
0118         result = QString::number(position.accuracy());
0119     }
0120     else if (key == KEY_DESCRIPTION)
0121     {
0122         result = position.description().simplified();
0123     }
0124 
0125     return result;
0126 }
0127 
0128 } // namespace Digikam