Getting position data from TPositionInfoBase
hamishwillee
(Talk | contribs) m (Hamishwillee - Bot update - Fix links) |
hamishwillee
(Talk | contribs) m (Hamishwillee - Adding missing translation link) |
||
| (One intermediate revision by one user not shown) | |||
| Line 1: | Line 1: | ||
| − | [[Category:Location]][[Category:Symbian C++]] | + | [[Category:Location]][[Category:Symbian C++]][[Category:Code Snippet]] |
{{ArticleMetaData <!-- v1.2 --> | {{ArticleMetaData <!-- v1.2 --> | ||
|sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | |sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | ||
| Line 9: | Line 9: | ||
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 --> | |dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 --> | ||
|signing= <!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | |signing= <!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | ||
| − | |capabilities= | + | |capabilities= Location |
|keywords= TPositionInfoBase, TPosition | |keywords= TPositionInfoBase, TPosition | ||
|language= <!-- Language category code for non-English topics - e.g. Lang-Chinese --> | |language= <!-- Language category code for non-English topics - e.g. Lang-Chinese --> | ||
| Line 22: | Line 22: | ||
|author= [[User:Tepaa]] | |author= [[User:Tepaa]] | ||
<!-- The following are not in current metadata --> | <!-- The following are not in current metadata --> | ||
| − | |||
|id= CS001412 | |id= CS001412 | ||
}} | }} | ||
| Line 29: | Line 28: | ||
This snippet demonstrates two ways of using {{Icode|TPositionInfoBase}}: | This snippet demonstrates two ways of using {{Icode|TPositionInfoBase}}: | ||
| − | |||
* getting the {{Icode|TPosition}} class from {{Icode|TPositionInfoBase}} | * getting the {{Icode|TPosition}} class from {{Icode|TPositionInfoBase}} | ||
* showing {{Icode|TPosition}} in textual format | * showing {{Icode|TPosition}} in textual format | ||
| Line 182: | Line 180: | ||
Position data is read from {{Icode|TPositionInfoBase}}. | Position data is read from {{Icode|TPositionInfoBase}}. | ||
| + | {{VersionHint}} | ||
| + | [[Category:S60 3rd Edition (initial release)]] [[Category:S60 3rd Edition FP1]] [[Category:S60 3rd Edition FP2]] | ||
| + | [[Category:S60 5th Edition]] | ||
==See also== | ==See also== | ||
| Line 187: | Line 188: | ||
* [[Retrieving location information using Symbian C++]] | * [[Retrieving location information using Symbian C++]] | ||
* [http://www.developer.nokia.com/info/sw.nokia.com/id/b8bf64b5-97b0-48bc-9ea2-8f20430c34c0/S60_Platform_Location_Example.html S60 Platform Location Example] | * [http://www.developer.nokia.com/info/sw.nokia.com/id/b8bf64b5-97b0-48bc-9ea2-8f20430c34c0/S60_Platform_Location_Example.html S60 Platform Location Example] | ||
| − | + | <!-- Translation --> [[zh-hans:从TPositionInfoBase获得位置数据]] | |
| − | + | ||
| − | + | ||
| − | [[ | + | |
| − | + | ||
Latest revision as of 08:59, 18 September 2012
Article Metadata
Tested with
Devices(s): Nokia 5800 XpressMusic
Compatibility
Platform(s): S60 3rd Edition
S60 5th Edition
S60 5th Edition
Platform Security
Capabilities: Location
Article
Keywords: TPositionInfoBase, TPosition
Created: tepaa
(06 May 2009)
Last edited: hamishwillee
(18 Sep 2012)
Contents |
Overview
This snippet demonstrates two ways of using TPositionInfoBase:
- getting the TPosition class from TPositionInfoBase
- showing TPosition in textual format
Note: The Location capability is included in the self-signing capabilities of S60 3rd Edition, Feature Pack 2 and newer platforms.
MMP file
The following libraries and capabilities are required:
CAPABILITY Location
LIBRARY lbs.lib
Header
#include <LbsPositionInfo.h>
#include <LbsPosition.h>
// Degrees sign delimeter used in formatting methods
_LIT(KDelimDegree,"\xb0"); // "°" symbol
// Dot delimeter used in formatting methods
_LIT(KDelimDot,"\x2e"); // "." symbol
// Plus sign delimeter used in formatting methods
_LIT(KDelimPlus,"\x2b"); // "+" symbol
// Minus sign delimeter used in formatting methods
_LIT(KDelimMinus,"\x2d"); // "-" symbol
// Quotation sign delimeter used in formatting methods
_LIT(KDelimQuot,"\x22"); // "\"" symbol
// Apostrophe sign delimeter used in formatting methods
_LIT(KApostrophe,"\x27"); // "'" symbol
const TInt KDegreeLength = 19;
Source
void CMyClass::PositionUpdated(TPositionInfoBase& aPosInfo)
{
// Check if position information class type is TPositionInfo
if (aPosInfo.PositionClassType() & EPositionInfoClass)
{
// Cast the TPositionInfoBase object to TPositionInfo
TPositionInfo* posInfo = static_cast<TPositionInfo*>(&aPosInfo);
// Get position
TPosition position;
posInfo->GetPosition(position);
// Convert positions to the descriptors
TBuf<KDegreeLength> latitudeDegr;
GetDegreesString(position.Latitude(), latitudeDegr);
// Convert positions to the descriptors
TBuf<KDegreeLength> longitudeDegr;
GetDegreesString(position.Longitude(), longitudeDegr);
}
}
void CMyClass::GetDegreesString(
const TReal64& aDegrees,TBuf<KDegreeLength>& aDegreesString) const
{
const TReal KSecondsInMinute = 60.0;
const TInt KNumWidth = 3;
// If the aDegree is a proper number
if ( !Math::IsNaN(aDegrees) )
{
// Integer part of the degrees
TInt intDegrees = static_cast<TInt>(aDegrees);
// Positive float of the degrees
TReal64 realDegrees = aDegrees;
// Convert to positive values
if ( intDegrees < 0 )
{
intDegrees = -intDegrees;
realDegrees = -realDegrees;
}
// Minutes
TReal64 realMinutes = (realDegrees - intDegrees) * KSecondsInMinute;
// Integer part of the minutes
TInt intMinutes = static_cast<TInt>(realMinutes);
// Seconds
TReal64 realSeconds = (realMinutes - intMinutes) * KSecondsInMinute;
TInt intSeconds = static_cast<TInt>((realMinutes - intMinutes) * KSecondsInMinute);
// Check the sign of the result
if ( aDegrees >= 0 )
{
aDegreesString.Append(KDelimPlus);
}
else
{
aDegreesString.Append(KDelimMinus);
}
// Add the degrees
TInt64 value = intDegrees;
aDegreesString.AppendNum(value);
// Add the separator
aDegreesString.Append(KDelimDegree);
// Add the minutes
value = intMinutes;
aDegreesString.AppendNum(value);
// Add the separator
aDegreesString.Append(KApostrophe);
// Add the seconds
value = intSeconds;
aDegreesString.AppendNum(value);
// Add the separator
aDegreesString.Append(KDelimQuot);
// Add the separator
aDegreesString.Append(KDelimDot);
// Get six last digits
realSeconds -= intSeconds;
realSeconds *= 1000;
// Add the seconds
aDegreesString.AppendNumFixedWidth(static_cast<TInt>(realSeconds),
EDecimal, KNumWidth);
}
}
Postconditions
Position data is read from TPositionInfoBase.

