// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/common/geoposition.h" namespace { // Sentinel values to mark invalid data. (WebKit carries companion is_valid // bools for this purpose; we may eventually follow that approach, but // sentinels worked OK in the gears code this is based on.) const double kBadLatitudeLongitude = 200; // Lowest point on land is at approximately -400 meters. const int kBadAltitude = -10000; const int kBadAccuracy = -1; // Accuracy must be non-negative. const int64 kBadTimestamp = kint64min; const int kBadHeading = -1; // Heading must be non-negative. const int kBadSpeed = -1; } Geoposition::Geoposition() : latitude(kBadLatitudeLongitude), longitude(kBadLatitudeLongitude), altitude(kBadAltitude), accuracy(kBadAccuracy), altitude_accuracy(kBadAccuracy), heading(kBadHeading), speed(kBadSpeed), error_code(ERROR_CODE_NONE) { } bool Geoposition::is_valid_latlong() const { return latitude >= -90.0 && latitude <= 90.0 && longitude >= -180.0 && longitude <= 180.0; } bool Geoposition::is_valid_altitude() const { return altitude > kBadAltitude; } bool Geoposition::is_valid_accuracy() const { return accuracy >= 0.0; } bool Geoposition::is_valid_altitude_accuracy() const { return altitude_accuracy >= 0.0; } bool Geoposition::is_valid_heading() const { return heading >= 0 && heading <= 360; } bool Geoposition::is_valid_speed() const { return speed >= 0; } bool Geoposition::is_valid_timestamp() const { return !timestamp.is_null(); } bool Geoposition::IsValidFix() const { return is_valid_latlong() && is_valid_accuracy() && is_valid_timestamp(); } bool Geoposition::IsInitialized() const { return error_code != ERROR_CODE_NONE || IsValidFix(); }