1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/common/geoposition.h"
8 // Sentinel values to mark invalid data. (WebKit carries companion is_valid
9 // bools for this purpose; we may eventually follow that approach, but
10 // sentinels worked OK in the Gears code this is based on.)
11 const double kBadLatitudeLongitude
= 200;
12 // Lowest point on land is at approximately -400 meters.
13 const int kBadAltitude
= -10000;
14 const int kBadAccuracy
= -1; // Accuracy must be non-negative.
15 const int64 kBadTimestamp
= kint64min
;
16 const int kBadHeading
= -1; // Heading must be non-negative.
17 const int kBadSpeed
= -1;
20 Geoposition::Geoposition()
21 : latitude(kBadLatitudeLongitude
),
22 longitude(kBadLatitudeLongitude
),
23 altitude(kBadAltitude
),
24 accuracy(kBadAccuracy
),
25 altitude_accuracy(kBadAccuracy
),
28 error_code(ERROR_CODE_NONE
) {
31 bool Geoposition::is_valid_latlong() const {
32 return latitude
>= -90.0 && latitude
<= 90.0 &&
33 longitude
>= -180.0 && longitude
<= 180.0;
36 bool Geoposition::is_valid_altitude() const {
37 return altitude
> kBadAltitude
;
40 bool Geoposition::is_valid_accuracy() const {
41 return accuracy
>= 0.0;
44 bool Geoposition::is_valid_altitude_accuracy() const {
45 return altitude_accuracy
>= 0.0;
48 bool Geoposition::is_valid_heading() const {
49 return heading
>= 0 && heading
<= 360;
52 bool Geoposition::is_valid_speed() const {
56 bool Geoposition::is_valid_timestamp() const {
57 return !timestamp
.is_null();
60 bool Geoposition::IsValidFix() const {
61 return is_valid_latlong() && is_valid_accuracy() && is_valid_timestamp();
64 bool Geoposition::IsInitialized() const {
65 return error_code
!= ERROR_CODE_NONE
|| IsValidFix();