#pragma once #include #include #include #define _USE_MATH_DEFINES #include //TODO: time struct GPSPoint{ double lat; double lon; GPSPoint(double latitude, double longitude) { lat = latitude; lon = longitude; } GPSPoint() { lat = 0.0; lon = 0.0; } }; struct GPSPointEx : GPSPoint{ std::time_t time; GPSPointEx(){ lat = 0.0; lon = 0.0; time = 0; } GPSPointEx(double latitude, double longitude, std::time_t timestamp) { lat = latitude; lon = longitude; time = timestamp; } GPSPointEx(GPSPoint pt, std::time_t timestamp) { lat = pt.lat; lon = pt.lon; time = timestamp; } }; enum PBACase{ nonRecorder = 0, chase, jump }; enum xDirection { right = 0, left }; enum yDirection { up = 0, down }; double chaseAngle(const GPSPoint &cp, const GPSPoint &np); unsigned short jumpX(const GPSPoint &p, const GPSPoint &p1, double spatialError, bool &isEdge); unsigned short jumpY(const GPSPoint &p, const GPSPoint &p1, double spatialError, bool isEdge = false); double distance(const GPSPoint &p1, const GPSPoint &p2); double haversine2(double lat1, double lon1, double lat2, double lon2); double haversine2(const GPSPoint &p1, const GPSPoint &p2); double haversineDistance(double lat1, double lon1, double lat2, double lon2); double haversineDistance(const GPSPoint &p1, const GPSPoint &p2); double deg2rad(double degree); double rad2deg(double radian); double aviation_modulo(double x, double y); GPSPoint latlon_radial_distance(const GPSPoint &basePoint, double deg, double d); double horizontalLength(unsigned short jx, double spatialError); double verticalLength(unsigned short jy, double spatialError, unsigned short jx); std::vector readTrajectory(std::string filename, std::string delimeter = " "); std::vector readTrajectoryEx(std::string filename, std::string delimeter = " "); void writeTrajectory(std::vector trajectory, std::string filename, std::string delimeter = "\t", bool writeHeader = true); void writeTrajectoryEx(std::vector trajectory, std::string filename, std::string delimeter = "\t", bool writeHeader = true);