1 /* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef LOCATION_H 17 #define LOCATION_H 18 19 #include <parcel.h> 20 #include <string> 21 #include <map> 22 23 namespace OHOS { 24 namespace Location { 25 26 typedef struct Poi { 27 std::string id = ""; 28 double confidence = 0.0; 29 std::string name = ""; 30 double latitude = 0.0; 31 double longitude = 0.0; 32 std::string administrativeArea = ""; 33 std::string subAdministrativeArea = ""; 34 std::string locality = ""; 35 std::string subLocality = ""; 36 std::string address = ""; 37 } Poi; 38 39 typedef struct PoiInfo { 40 std::vector<Poi> poiArray; 41 uint64_t timestamp = 0; 42 } PoiInfo; 43 44 class Location : public Parcelable { 45 public: 46 Location(); 47 explicit Location(const Location &location); 48 ~Location() override = default; 49 GetLatitude()50 inline double GetLatitude() const 51 { 52 return latitude_; 53 } 54 SetLatitude(double latitude)55 inline void SetLatitude(double latitude) 56 { 57 latitude_ = latitude; 58 } 59 GetLongitude()60 inline double GetLongitude() const 61 { 62 return longitude_; 63 } 64 SetLongitude(double longitude)65 inline void SetLongitude(double longitude) 66 { 67 longitude_ = longitude; 68 } 69 GetAltitude()70 inline double GetAltitude() const 71 { 72 return altitude_; 73 } 74 SetAltitude(double altitude)75 inline void SetAltitude(double altitude) 76 { 77 altitude_ = altitude; 78 } 79 GetAccuracy()80 inline double GetAccuracy() const 81 { 82 return accuracy_; 83 } 84 SetAccuracy(double accuracy)85 inline void SetAccuracy(double accuracy) 86 { 87 accuracy_ = accuracy; 88 } 89 GetSpeed()90 inline double GetSpeed() const 91 { 92 return speed_; 93 } 94 SetSpeed(double speed)95 inline void SetSpeed(double speed) 96 { 97 speed_ = speed; 98 } 99 GetDirection()100 inline double GetDirection() const 101 { 102 return direction_; 103 } 104 SetDirection(double direction)105 inline void SetDirection(double direction) 106 { 107 direction_ = direction; 108 } 109 GetTimeStamp()110 inline int64_t GetTimeStamp() const 111 { 112 return timeStamp_; 113 } 114 SetTimeStamp(int64_t timeStamp)115 inline void SetTimeStamp(int64_t timeStamp) 116 { 117 timeStamp_ = timeStamp; 118 } 119 GetTimeSinceBoot()120 inline int64_t GetTimeSinceBoot() const 121 { 122 return timeSinceBoot_; 123 } 124 SetTimeSinceBoot(int64_t timeStamp)125 inline void SetTimeSinceBoot(int64_t timeStamp) 126 { 127 timeSinceBoot_ = timeStamp; 128 } 129 GetAdditions()130 inline std::vector<std::string> GetAdditions() const 131 { 132 return additions_; 133 } 134 SetAdditions(std::vector<std::string> additions,bool ifAppend)135 inline void SetAdditions(std::vector<std::string> additions, bool ifAppend) 136 { 137 if (!ifAppend) { 138 std::vector<std::string>().swap(additions_); 139 } 140 for (auto it = additions.begin(); it != additions.end(); ++it) { 141 additions_.push_back(*it); 142 } 143 } 144 GetAdditionSize()145 inline int64_t GetAdditionSize() const 146 { 147 return additionSize_; 148 } 149 SetAdditionSize(int64_t size)150 inline void SetAdditionSize(int64_t size) 151 { 152 additionSize_ = size; 153 } 154 GetIsFromMock()155 inline int GetIsFromMock() const 156 { 157 return isFromMock_; 158 } 159 SetIsFromMock(int fromMock)160 inline void SetIsFromMock(int fromMock) 161 { 162 isFromMock_ = fromMock; 163 } 164 GetFloorNo()165 inline int32_t GetFloorNo() const 166 { 167 return floorNo_; 168 } 169 SetFloorNo(int32_t floorNo)170 inline void SetFloorNo(int32_t floorNo) 171 { 172 floorNo_ = floorNo; 173 } 174 GetIsSystemApp()175 inline int32_t GetIsSystemApp() const 176 { 177 return isSystemApp_; 178 } 179 SetIsSystemApp(int32_t isSystemApp)180 inline void SetIsSystemApp(int32_t isSystemApp) 181 { 182 isSystemApp_ = isSystemApp; 183 } 184 GetUncertaintyOfTimeSinceBoot()185 inline int64_t GetUncertaintyOfTimeSinceBoot() const 186 { 187 return uncertaintyOfTimeSinceBoot_; 188 } 189 SetUncertaintyOfTimeSinceBoot(int64_t uncertaintyOfTimeSinceBoot)190 inline void SetUncertaintyOfTimeSinceBoot(int64_t uncertaintyOfTimeSinceBoot) 191 { 192 uncertaintyOfTimeSinceBoot_ = uncertaintyOfTimeSinceBoot; 193 } 194 GetFloorAccuracy()195 inline double GetFloorAccuracy() const 196 { 197 return floorAccuracy_; 198 } 199 SetFloorAccuracy(double floorAccuracy)200 inline void SetFloorAccuracy(double floorAccuracy) 201 { 202 floorAccuracy_ = floorAccuracy; 203 } 204 GetAltitudeAccuracy()205 inline double GetAltitudeAccuracy() const 206 { 207 return altitudeAccuracy_; 208 } 209 SetAltitudeAccuracy(double altitudeAccuracy)210 inline void SetAltitudeAccuracy(double altitudeAccuracy) 211 { 212 altitudeAccuracy_ = altitudeAccuracy; 213 } 214 GetSpeedAccuracy()215 inline double GetSpeedAccuracy() const 216 { 217 return speedAccuracy_; 218 } 219 SetSpeedAccuracy(double speedAccuracy)220 inline void SetSpeedAccuracy(double speedAccuracy) 221 { 222 speedAccuracy_ = speedAccuracy; 223 } 224 GetDirectionAccuracy()225 inline double GetDirectionAccuracy() const 226 { 227 return directionAccuracy_; 228 } 229 SetDirectionAccuracy(double directionAccuracy)230 inline void SetDirectionAccuracy(double directionAccuracy) 231 { 232 directionAccuracy_ = directionAccuracy; 233 } 234 GetLocationSourceType()235 inline int32_t GetLocationSourceType() const 236 { 237 return locationSourceType_; 238 } 239 SetLocationSourceType(int32_t locationSourceType)240 inline void SetLocationSourceType(int32_t locationSourceType) 241 { 242 locationSourceType_ = locationSourceType; 243 } 244 GetUuid()245 inline std::string GetUuid() const 246 { 247 return uuid_; 248 } 249 SetUuid(std::string uuid)250 inline void SetUuid(std::string uuid) 251 { 252 uuid_ = uuid; 253 } 254 GetAdditionsMap()255 inline std::map<std::string, std::string> GetAdditionsMap() const 256 { 257 return additionsMap_; 258 } 259 GetFieldValidity()260 inline int32_t GetFieldValidity() const 261 { 262 return fieldValidity_; 263 } 264 SetFieldValidity(int32_t fieldValidity)265 inline void SetFieldValidity(int32_t fieldValidity) 266 { 267 fieldValidity_ = fieldValidity; 268 } 269 GetPoiInfo()270 inline PoiInfo GetPoiInfo() const 271 { 272 return poiInfo_; 273 } 274 SetPoiInfo(PoiInfo poiInfo)275 inline void SetPoiInfo(PoiInfo poiInfo) 276 { 277 poiInfo_ = poiInfo; 278 } 279 280 void ReadFromParcel(Parcel& parcel); 281 bool Marshalling(Parcel& parcel) const override; 282 std::string ToString() const; 283 static Location* Unmarshalling(Parcel& parcel); 284 static std::unique_ptr<Location> UnmarshallingMakeUnique(Parcel& parcel); 285 static std::shared_ptr<Location> UnmarshallingShared(Parcel& parcel); 286 bool LocationEqual(const std::unique_ptr<Location>& location); 287 bool AdditionEqual(const std::unique_ptr<Location>& location); 288 static double GetDistanceBetweenLocations(const double lat1, const double lon1, 289 const double lat2, const double lon2); 290 static bool isValidLatitude(double latitude); 291 static bool isValidLongitude(double longitude); 292 void VectorString16ToVectorString8(const std::vector<std::u16string>& additions); 293 std::vector<std::u16string> VectorString8ToVectorString16() const; 294 static bool WritePoiInfoToParcel(const PoiInfo& data, Parcel& parcel); 295 static PoiInfo ReadPoiInfoFromParcel(Parcel& parcel); 296 private: 297 double latitude_; 298 double longitude_; 299 double altitude_; 300 double accuracy_; 301 double speed_; 302 double direction_; 303 int64_t timeStamp_; 304 int64_t timeSinceBoot_; 305 std::vector<std::string> additions_; 306 int64_t additionSize_; 307 bool isFromMock_; 308 int32_t isSystemApp_; 309 int32_t floorNo_; 310 double floorAccuracy_; 311 std::map<std::string, std::string> additionsMap_; 312 double altitudeAccuracy_; 313 double speedAccuracy_; 314 double directionAccuracy_; 315 int64_t uncertaintyOfTimeSinceBoot_; 316 int32_t locationSourceType_; 317 std::string uuid_; 318 int32_t fieldValidity_; 319 PoiInfo poiInfo_; 320 }; 321 } // namespace Location 322 } // namespace OHOS 323 #endif // LOCATION_H