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