geo.h
上传用户:lbr_007
上传日期:2019-05-31
资源大小:282k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

Visual C++

  1. // geo.h
  2. //
  3. #ifndef GEO_CALCULATIONS_H_
  4. #define GEO_CALCULATIONS_H_
  5. #pragma once
  6.   //
  7.   // some geo constants
  8.   //
  9. namespace GEO {
  10. const double PIE = 3.14159265359;
  11. const double PIOVER2 = PIE/2.0;
  12. const double TWOPIE = 6.28318530718;
  13. const double DE2RA = 0.01745329252;
  14. const double RA2DE = 57.2957795129;
  15. const double ERAD = 6378.137;
  16. const double ERADM = 6378137.0;
  17. const double AVG_ERAD = 6371.0;
  18. const double FLATTENING = 1.000000/298.257223563;// Earth flattening (WGS84)
  19. const double EPS = 0.000000000005;
  20. const double KM2MI = 0.621371;
  21. const double GEOSTATIONARY_ALT = 35786.0; // km - approximate value
  22. }
  23.   //
  24.   // geographic calculations class - everything is static so there is no
  25.   // need to create an object of type GeoCalc. if you want to use this class
  26.   // just call the methods with a "GeoCalc::" prepended as in the sample code.
  27.   //
  28. class GeoCalc {
  29. public:
  30.   // great circle methods
  31. static double GCDistance(double lat1, double lon1, double lat2, double lon2);
  32. static double GCAzimuth(double lat1, double lon1, double lat2, double lon2);
  33. static void GCDistanceAzimuth(double lat1, double lon1, double dist, double az,
  34. double& lat2, double& lon2);
  35. static void GCSatellite(double lat1, double lon1, double sat_lon,
  36. double& az, double& elev);
  37. static bool GCIntersectSegment(double lat1A, double lon1A, double lat1B, double lon1B,
  38. double lat2A, double lon2A, double lat2B, double lon2B,
  39. double& lat3A, double& lon3A, double& lat3B, double& lon3B);
  40.   // ellipsoid methods
  41. static double ApproxDistance(double lat1, double lon1, double lat2, double lon2);
  42. static double EllipsoidDistance(double lat1, double lon1, double lat2, double lon2);
  43. static double EllipsoidAzimuth(double lat1, double lon1, double lat2, double lon2);
  44. static double EllipseArcLength(double lat1, double lat2, double a = GEO::ERAD,
  45. double f = GEO::FLATTENING);
  46.   // utility methods
  47. static double DecodeLatitude(const char * txt);
  48. static double DecodeLongitude(const char * txt);
  49. static void CoordinateToDMS(double coord, INT32& deg, INT32& minutes, double& secs);
  50. static void EncodeLatitude(double lat, std::string& s);
  51. static void EncodeLongitude(double lon, std::string& s);
  52. };
  53. #endif