williamr@2: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __LBSPOSITION_H__ williamr@2: #define __LBSPOSITION_H__ williamr@2: williamr@2: #include williamr@4: #include williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: Datum IDs williamr@2: */ williamr@2: typedef TUid TPositionDatumId; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: Constant for the co-ordinate system for GPS system williamr@2: */ williamr@2: const TPositionDatumId KPositionDatumWgs84 = {0x101FAA29}; williamr@2: williamr@2: class TCoordinate williamr@2: /** williamr@2: TCoordinate is used to hold the basic coordinates of a location (latitude, williamr@2: longitude and altitude). williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TCoordinate(); williamr@2: IMPORT_C TCoordinate(const TReal64& aLatitude, williamr@2: const TReal64& aLongitude); williamr@2: IMPORT_C TCoordinate(const TReal64& aLatitude, williamr@2: const TReal64& aLongitude, williamr@2: TReal32 aAltitude); williamr@2: williamr@2: IMPORT_C void SetCoordinate(const TReal64& aLatitude, williamr@2: const TReal64& aLongitude); williamr@2: IMPORT_C void SetCoordinate(const TReal64& aLatitude, williamr@2: const TReal64& aLongitude, williamr@2: TReal32 aAltitude); williamr@2: williamr@2: IMPORT_C void SetDatum(TPositionDatumId aDatum); williamr@2: williamr@2: IMPORT_C TReal64 Latitude() const; williamr@2: IMPORT_C TReal64 Longitude() const; williamr@2: IMPORT_C TReal32 Altitude() const; williamr@2: IMPORT_C TPositionDatumId Datum() const; williamr@2: williamr@2: IMPORT_C TInt Distance(const TCoordinate& aCoordinate, williamr@2: TReal32& aDistance) const; williamr@2: IMPORT_C TInt BearingTo(const TCoordinate& aTargetCoordinate, williamr@2: TReal32& aBearing) const; williamr@2: williamr@2: IMPORT_C TInt Move(TReal32 aBearing, TReal32 aDistance); williamr@2: williamr@2: private: williamr@2: void NormalizeCoordinate(); williamr@2: williamr@2: protected: williamr@4: /** Latitude, defaults to WGS-84 format. Represented in degree. */ williamr@2: TReal64 iLatitude; williamr@4: /** Longitude, defaults to WGS-84 format. Represented in degree. */ williamr@2: TReal64 iLongitude; williamr@4: /** Altitude, defaults to WGS-84 format. Represented in meters. */ williamr@2: TReal32 iAltitude; williamr@2: /** The ID of the datum the coordinate is in, defaults to WGS-84 format. */ williamr@2: TPositionDatumId iDatum; williamr@2: /** Unused variable for future expansion. */ williamr@2: TUint8 iReserved[4]; williamr@2: }; williamr@2: williamr@2: williamr@2: class TLocality : public TCoordinate williamr@2: /** williamr@2: Adds an error estimate for the horizontal and vertical accuracy of the point williamr@2: to TCoordinate. Accuracy information is held in a TReal32 and is measure in williamr@2: metres. The class also provides its own methods for determining the distance williamr@2: and bearing to a target point. These methods also provide an error estimate. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TLocality(); williamr@2: IMPORT_C TLocality(const TCoordinate& aCoordinate, williamr@2: TReal32 aHorizontalAccuracy); williamr@2: IMPORT_C TLocality(const TCoordinate& aCoordinate, williamr@2: TReal32 aHorizontalAccuracy, williamr@2: TReal32 aVerticalAccuracy); williamr@2: williamr@2: IMPORT_C void SetHorizontalAccuracy(TReal32 aHorizontalAccuracy); williamr@2: IMPORT_C void SetVerticalAccuracy(TReal32 aVerticalAccuracy); williamr@2: IMPORT_C void SetAccuracy(TReal32 aHorizontalAccuracy, williamr@2: TReal32 aVerticalAccuracy); williamr@2: williamr@2: IMPORT_C TReal32 HorizontalAccuracy() const; williamr@2: IMPORT_C TReal32 VerticalAccuracy() const; williamr@2: williamr@2: IMPORT_C TInt Distance(const TCoordinate& aCoordinate, williamr@2: TReal32& aDistance) const; williamr@2: IMPORT_C TInt Distance(const TLocality& aLocality, williamr@2: TReal32& aDistance, williamr@2: TReal32& aDelta) const; williamr@2: williamr@2: IMPORT_C TInt BearingTo(const TCoordinate& aTargetCoordinate, williamr@2: TReal32& aBearing) const; williamr@2: williamr@2: IMPORT_C TInt BearingTo(const TLocality& aTargetLocality, williamr@2: TReal32& aBearing, williamr@2: TReal32& aDelta) const; williamr@2: williamr@2: protected: williamr@2: /** Horizontal (earths-surface) accuracy, in metres. */ williamr@2: TReal32 iHorizontalAccuracy; williamr@2: /** Altitudinal accuracy, in metres. */ williamr@2: TReal32 iVerticalAccuracy; williamr@2: williamr@2: private: williamr@2: /** Unused variable for future expansion. */ williamr@2: TUint8 iReserved[16]; williamr@2: }; williamr@2: williamr@2: williamr@2: class TPosition : public TLocality williamr@2: /** williamr@2: This class is the standard data structure for retrieving location williamr@2: information. It adds a time dimension to the inherited TLocality information. williamr@2: This enables the speed to be calculated from two TPosition instances. williamr@2: williamr@2: The time reflects the system time (that is, the mobile terminal) of when the williamr@2: location fix was obtained. It does not indicate the time as obtained from the williamr@2: position technology (for example network or satellite time). williamr@2: williamr@2: The time is contained in a TTime data structure that provides microsecond williamr@2: resolution. However, it should be noted that system clocks only provide a williamr@2: resolution of milliseconds or indeed hundredths of a second. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TPosition(); williamr@2: IMPORT_C TPosition(const TLocality& aLocality, williamr@2: TTime aTime); williamr@2: williamr@2: IMPORT_C void SetTime(TTime aTime); williamr@2: IMPORT_C void SetCurrentTime(); williamr@2: williamr@2: IMPORT_C TTime Time() const; williamr@2: williamr@2: IMPORT_C TInt Speed(const TPosition& aPosition, williamr@2: TReal32& aSpeed) const; williamr@2: IMPORT_C TInt Speed(const TPosition& aPosition, williamr@2: TReal32& aSpeed, williamr@2: TReal32& aDelta) const; williamr@2: williamr@2: protected: williamr@2: /** This is the system time when the position related member data was williamr@2: obtained. */ williamr@2: TTime iTime; williamr@2: williamr@2: private: williamr@2: /** Unused variable for future expansion. */ williamr@2: TUint8 iReserved[16]; williamr@2: }; williamr@2: williamr@2: williamr@2: class TCourse williamr@2: /** williamr@2: This is used to hold information about the current speed and direction williamr@2: of the device. It is generally used in conjunction with TPositionCourseInfo williamr@2: when a positioning technology is able to supply these details as part of williamr@2: its positioning information. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TCourse(); williamr@2: williamr@2: IMPORT_C TReal32 Speed() const; williamr@4: IMPORT_C TReal32 VerticalSpeed() const; williamr@2: IMPORT_C TReal32 Heading() const; williamr@2: IMPORT_C TReal32 Course() const; williamr@4: williamr@4: IMPORT_C TReal32 SpeedAccuracy() const; williamr@4: IMPORT_C TReal32 VerticalSpeedAccuracy() const; williamr@4: IMPORT_C TReal32 HeadingAccuracy() const; williamr@2: IMPORT_C TReal32 CourseAccuracy() const; williamr@4: williamr@4: williamr@4: IMPORT_C void SetSpeed(TReal32 aSpeed); williamr@4: IMPORT_C void SetVerticalSpeed(TReal32 aVerticalSpeed); williamr@4: IMPORT_C void SetHeading(TReal32 aHeading); williamr@2: IMPORT_C void SetSpeedAccuracy(TReal32 aSpeedAccuracy); williamr@4: IMPORT_C void SetVerticalSpeedAccuracy(TReal32 aVerticalSpeedAccuracy); williamr@2: IMPORT_C void SetHeadingAccuracy(TReal32 aHeadingAccuracy); williamr@2: IMPORT_C void SetCourse(TReal32 aCourse); williamr@2: IMPORT_C void SetCourseAccuracy(TReal32 aCourseAccuracy); williamr@4: williamr@4: williamr@4: williamr@2: williamr@2: protected: williamr@2: /** Speed, in metres per second. */ williamr@2: TReal32 iSpeed; williamr@4: /** True Heading, in degrees. */ williamr@2: TReal32 iHeading; williamr@2: /** Speed accuracy, in metres per second. */ williamr@2: TReal32 iSpeedAccuracy; williamr@2: /** Heading accuracy, in degrees. */ williamr@2: TReal32 iHeadingAccuracy; williamr@4: /** True Course, in degrees. */ williamr@2: TReal32 iCourse; williamr@2: /** Course accuracy, in degrees. */ williamr@2: TReal32 iCourseAccuracy; williamr@4: /** Vertical Speed, in metres per second. */ williamr@4: TReal32 iVerticalSpeed; williamr@4: /** Vertical Speed accuracy, in metres per second. */ williamr@4: TReal32 iVerticalSpeedAccuracy; williamr@4: williamr@2: private: williamr@2: /** Unused variable for future expansion. */ williamr@4: TUint8 iReserved[8]; williamr@2: }; williamr@2: williamr@2: #endif //__LBSPOSITION_H__