File Coverage

blib/lib/Net/GPSD3/Return/TPV.pm
Criterion Covered Total %
statement 32 32 100.0
branch 2 2 100.0
condition n/a
subroutine 21 21 100.0
pod 17 17 100.0
total 72 72 100.0


line stmt bran cond sub pod time code
1             package Net::GPSD3::Return::TPV;
2 4     4   962 use strict;
  4         8  
  4         144  
3 4     4   23 use warnings;
  4         8  
  4         132  
4 4     4   21 use base qw{Net::GPSD3::Return::Unknown::Timestamp};
  4         8  
  4         1015  
5 4     4   3489 use GPS::Point;
  4         10921  
  4         2013  
6              
7             our $VERSION='0.12';
8              
9             =head1 NAME
10              
11             Net::GPSD3::Return::TPV - Net::GPSD3 Return TPV Object
12              
13             =head1 SYNOPSIS
14              
15             printf "Time: %s, Lat: %s, Lon: %s\n", $object->time, $object->lat, $object->lon;
16              
17             =head1 DESCRIPTION
18              
19             Provides a Perl object interface to the Time-Velocity-Position (TVP) object returned by the GPSD daemon.
20              
21             Example JSON objects:
22              
23             =head3 Protocol 3.1 Versions
24              
25             {
26             "class":"TPV",
27             "tag":"MID2",
28             "device":"/dev/ttyUSB0",
29             "time":1253593085.470,
30             "ept":0.005,
31             "lat":38.88945123,
32             "lon":-77.03522143,
33             "track":171.7249,
34             "speed":0.467,
35             "mode":2
36             }
37              
38             {
39             "class":"TPV",
40             "tag":"MID2",
41             "device":"/dev/ttyUSB0",
42             "time":1253593667.430,
43             "ept":0.005,
44             "lat":38.88945123,
45             "lon":-77.03522143,
46             "alt":146.911,
47             "track":180.0000,
48             "speed":0.194,
49             "climb":-0.157,
50             "mode":3
51             }
52              
53             =head3 Protocol 3.4 Version
54              
55             {
56             "class":"TPV",
57             "tag":"0x0106",
58             "device":"/dev/cuaU0",
59             "time":"2011-03-20T06:51:59.12Z",
60             "ept":0.005,
61             "lat":37.371427205,
62             "lon":-122.015179890,
63             "alt":25.789,
64             "epx":1.926,
65             "epy":1.808,
66             "epv":6.497,
67             "track":0.0000,
68             "speed":0.000,
69             "climb":0.000,
70             "eps":3.85,
71             "mode":3
72             }
73              
74             =head1 METHODS PROPERTIES
75              
76             =head2 class
77              
78             Returns the object class
79              
80             =head2 string
81              
82             Returns the JSON string
83              
84             =head2 parent
85              
86             Return the parent Net::GPSD object
87              
88             =head2 device
89              
90             Name of originating device.
91              
92             =cut
93              
94 1     1 1 6 sub device {shift->{"device"}};
95              
96             =head2 tag
97              
98             Type tag associated with this GPS sentence; from an NMEA device this is just the NMEA sentence type.
99              
100             =cut
101              
102 2     2 1 12 sub tag {shift->{"tag"}};
103              
104             =head2 mode
105              
106             NMEA mode: %d, 0=no mode value yet seen, 1=no fix, 2=2D, 3=3D.
107              
108             =cut
109              
110 2     2 1 10 sub mode {shift->{"mode"}};
111              
112             =head2 time
113              
114             Seconds since the Unix epoch, UTC. The value may have a fractional part of up to .01sec precision.
115              
116             Note: In 2.96 (protocol 3.4) the TPV->time format changed from unix epoch to W3C, but this method hides that from the user.
117              
118             =head2 timestamp
119              
120             W3C formated timestamp value either directly from the protocol >= 3.4 or calculated < 3.4. The value may have a fractional part of up to .01sec precision.
121              
122             Note: I expect that in protocol 3.5 the value will be passed directly as TPV->timestamp
123              
124             =head2 datetime
125              
126             Returns a L object
127              
128             =head2 lat
129              
130             Latitude in degrees: +/- signifies West/East
131              
132             =cut
133              
134 2     2 1 8 sub lat {shift->{"lat"}};
135              
136             =head2 lon
137              
138             Longitude in degrees: +/- signifies North/South.
139              
140             =cut
141              
142 2     2 1 10 sub lon {shift->{"lon"}};
143              
144             =head2 alt
145              
146             Altitude in meters.
147              
148             =cut
149              
150 1     1 1 5 sub alt {shift->{"alt"}};
151              
152             =head2 speed
153              
154             Speed over ground, meters per second.
155              
156             =cut
157              
158 2     2 1 10 sub speed {shift->{"speed"}};
159              
160             =head2 track
161              
162             Course over ground, degrees from true north.
163              
164             =cut
165              
166 2     2 1 11 sub track {shift->{"track"}};
167              
168             =head2 climb
169              
170             Climb (postive) or sink (negative) rate, meters per second.
171              
172             =cut
173              
174 2     2 1 9 sub climb {shift->{"climb"}};
175              
176             =head2 ept
177              
178             Estimated timestamp error (%f, seconds, 95% confidence).
179              
180             =cut
181              
182 2     2 1 370 sub ept {shift->{"ept"}};
183              
184             =head2 epx
185              
186             =cut
187              
188 2     2 1 9 sub epx {shift->{"epx"}};
189              
190             =head2 epy
191              
192             Latitude error estimate in meters, 95% confidence.
193              
194             =cut
195              
196 1     1 1 7 sub epy {shift->{"epy"}};
197              
198             =head2 epv
199              
200             Estimated vertical error in meters, 95% confidence.
201              
202             =cut
203              
204 2     2 1 9 sub epv {shift->{"epv"}};
205              
206             =head2 eps
207              
208             Speed error estimate in meters/sec, 95% confifdence.
209              
210             =cut
211              
212 2     2 1 10 sub eps {shift->{"eps"}};
213              
214             =head2 epd
215              
216             Direction error estinmate in degrees, 95% confifdence.
217              
218             =cut
219              
220 1     1 1 3 sub epd {shift->{"epd"}};
221              
222             =head2 epc
223              
224             Climb/sink error estinmate in meters/sec, 95% confifdence.
225              
226             =cut
227              
228 1     1 1 5 sub epc {shift->{"epc"}};
229              
230             =head1 METHODS VALUE ADDED
231              
232             =head2 point
233              
234             Returns a L Object
235              
236             =cut
237              
238             sub point {
239 6     6 1 1993 my $self=shift;
240 6 100       17 unless (defined($self->{"point"})) {
241 1         6 $self->{"point"}=GPS::Point->new(
242             time => $self->datetime->hires_epoch, #float seconds from the unix epoch
243             timestamp => $self->timestamp, #not yet supported but I'm planning it
244             datetime => $self->datetime, #not yet supported but I'm planning it
245             lat => $self->lat, #signed degrees
246             lon => $self->lon, #signed degrees
247             alt => $self->alt, #meters above the WGS-84 ellipsoid
248             speed => $self->speed, #meters/second (over ground)
249             heading => $self->track, #degrees clockwise from North
250             climb => $self->climb, #meters/second
251             etime => $self->ept, #float seconds
252             ehorizontal => $self->epx, #float meters
253             evertical => $self->epv, #float meters
254             espeed => $self->eps, #meters/second
255             eheading => $self->epd, #degrees
256             eclimb => $self->epc, #meters/second
257             mode => $self->mode, #GPS mode [?=>undef,None=>1,2D=>2,3D=>3]
258             tag => $self->tag, #Name of the GPS message for data
259             );
260             }
261 6         69 return $self->{"point"};
262             }
263              
264             =head1 BUGS
265              
266             Log on RT and Send to gpsd-dev email list
267              
268             =head1 SUPPORT
269              
270             DavisNetworks.com supports all Perl applications including this package.
271              
272             Try gpsd-dev email list
273              
274             =head1 AUTHOR
275              
276             Michael R. Davis
277             CPAN ID: MRDVT
278             STOP, LLC
279             domain=>michaelrdavis,tld=>com,account=>perl
280             http://www.stopllc.com/
281              
282             =head1 COPYRIGHT
283              
284             This program is free software licensed under the...
285              
286             The BSD License
287              
288             The full text of the license can be found in the LICENSE file included with this module.
289              
290             =head1 SEE ALSO
291              
292             L, L, L
293              
294             =cut
295              
296             1;