File indexing completed on 2025-01-18 09:35:38
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELLPS_HPP
0040 #define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELLPS_HPP
0041
0042 #include <string>
0043
0044 namespace boost { namespace geometry { namespace projections {
0045
0046 namespace detail {
0047
0048
0049 template <typename T>
0050 struct pj_ellps_type
0051 {
0052 std::string id;
0053
0054
0055
0056 T a;
0057 T b;
0058
0059 };
0060
0061 inline double b_from_a_rf(double a, double rf)
0062 {
0063 return a * (1.0 - 1.0 / rf);
0064 }
0065
0066 #define BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF(ID, A, RF, NAME) \
0067 {ID, A, b_from_a_rf(A, RF), }
0068
0069 #define BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B(ID, A, B, NAME) \
0070 {ID, A, B, }
0071
0072 template <typename T>
0073 inline std::pair<const pj_ellps_type<T>*, int> pj_get_ellps()
0074 {
0075 static const pj_ellps_type<T> pj_ellps[] =
0076 {
0077 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("MERIT", 6378137.0, 298.257, "MERIT 1983"),
0078 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("SGS85", 6378136.0, 298.257, "Soviet Geodetic System 85"),
0079 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("GRS80", 6378137.0, 298.257222101, "GRS 1980(IUGG, 1980)"),
0080 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("IAU76", 6378140.0, 298.257, "IAU 1976"),
0081 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("airy", 6377563.396, 6356256.910, "Airy 1830"),
0082 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("APL4.9", 6378137.0, 298.25, "Appl. Physics. 1965"),
0083 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("NWL9D", 6378145.0, 298.25, "Naval Weapons Lab., 1965"),
0084 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("mod_airy", 6377340.189, 6356034.446, "Modified Airy"),
0085 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("andrae", 6377104.43, 300.0, "Andrae 1876 (Den., Iclnd.)"),
0086 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("aust_SA", 6378160.0, 298.25, "Australian Natl & S. Amer. 1969"),
0087 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("GRS67", 6378160.0, 298.2471674270, "GRS 67(IUGG 1967)"),
0088 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("bessel", 6377397.155, 299.1528128, "Bessel 1841"),
0089 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("bess_nam", 6377483.865, 299.1528128, "Bessel 1841 (Namibia)"),
0090 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("clrk66", 6378206.4, 6356583.8, "Clarke 1866"),
0091 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("clrk80", 6378249.145, 293.4663, "Clarke 1880 mod."),
0092 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("clrk80ign", 6378249.2, 293.4660212936269, "Clarke 1880 (IGN)."),
0093 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("CPM", 6375738.7, 334.29, "Comm. des Poids et Mesures 1799"),
0094 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("delmbr", 6376428.0, 311.5, "Delambre 1810 (Belgium)"),
0095 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("engelis", 6378136.05, 298.2566, "Engelis 1985"),
0096 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("evrst30", 6377276.345, 300.8017, "Everest 1830"),
0097 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("evrst48", 6377304.063, 300.8017, "Everest 1948"),
0098 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("evrst56", 6377301.243, 300.8017, "Everest 1956"),
0099 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("evrst69", 6377295.664, 300.8017, "Everest 1969"),
0100 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("evrstSS", 6377298.556, 300.8017, "Everest (Sabah & Sarawak)"),
0101 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("fschr60", 6378166.0, 298.3, "Fischer (Mercury Datum) 1960"),
0102 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("fschr60m", 6378155.0, 298.3, "Modified Fischer 1960"),
0103 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("fschr68", 6378150.0, 298.3, "Fischer 1968"),
0104 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("helmert", 6378200.0, 298.3, "Helmert 1906"),
0105 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("hough", 6378270.0, 297.0, "Hough"),
0106 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("intl", 6378388.0, 297.0, "International 1909 (Hayford)"),
0107 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("krass", 6378245.0, 298.3, "Krassovsky, 1942"),
0108 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("kaula", 6378163.0, 298.24, "Kaula 1961"),
0109 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("lerch", 6378139.0, 298.257, "Lerch 1979"),
0110 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("mprts", 6397300.0, 191.0, "Maupertius 1738"),
0111 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("new_intl", 6378157.5, 6356772.2, "New International 1967"),
0112 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("plessis", 6376523.0, 6355863.0, "Plessis 1817 (France)"),
0113 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("SEasia", 6378155.0, 6356773.3205, "Southeast Asia"),
0114 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("walbeck", 6376896.0, 6355834.8467, "Walbeck"),
0115 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("WGS60", 6378165.0, 298.3, "WGS 60"),
0116 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("WGS66", 6378145.0, 298.25, "WGS 66"),
0117 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_RF("WGS72", 6378135.0, 298.26, "WGS 72"),
0118
0119
0120 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("WGS84", 6378137.0, 6356752.3142451793, "WGS 84"),
0121 BOOST_GEOMETRY_PROJECTIONS_DETAIL_PJ_ELLPS_B ("sphere", 6370997.0, 6370997.0, "Normal Sphere (r=6370997)")
0122 };
0123
0124 return std::make_pair(pj_ellps, (int)(sizeof(pj_ellps) / sizeof(pj_ellps[0])));
0125 }
0126
0127 }
0128 }}}
0129
0130 #endif