123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- #ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_STRERRNO_HPP
- #define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_STRERRNO_HPP
- #include <cerrno>
- #include <cstring>
- #include <sstream>
- #include <string>
- namespace boost { namespace geometry { namespace projections
- {
- namespace detail
- {
- enum error_type
- {
- error_no_args = -1,
- error_no_option_in_init_file = -2,
- error_no_colon_in_init_string = -3,
- error_proj_not_named = -4,
- error_unknown_projection_id = -5,
- error_eccentricity_is_one = -6,
- error_unknow_unit_id = -7,
- error_invalid_boolean_param = -8,
- error_unknown_ellp_param = -9,
- error_rev_flattening_is_zero = -10,
- error_ref_rad_larger_than_90 = -11,
- error_es_less_than_zero = -12,
- error_major_axis_not_given = -13,
- error_lat_or_lon_exceed_limit = -14,
- error_invalid_x_or_y = -15,
- error_wrong_format_dms_value = -16,
- error_non_conv_inv_meri_dist = -17,
- error_non_con_inv_phi2 = -18,
- error_acos_asin_arg_too_large = -19,
- error_tolerance_condition = -20,
- error_conic_lat_equal = -21,
- error_lat_larger_than_90 = -22,
- error_lat1_is_zero = -23,
- error_lat_ts_larger_than_90 = -24,
- error_control_point_no_dist = -25,
- error_no_rotation_proj = -26,
- error_w_or_m_zero_or_less = -27,
- error_lsat_not_in_range = -28,
- error_path_not_in_range = -29,
- error_h_less_than_zero = -30,
- error_k_less_than_zero = -31,
- error_lat_1_or_2_zero_or_90 = -32,
- error_lat_0_or_alpha_eq_90 = -33,
- error_ellipsoid_use_required = -34,
- error_invalid_utm_zone = -35,
- error_tcheby_val_out_of_range = -36,
- error_failed_to_find_proj = -37,
- error_failed_to_load_grid = -38,
- error_invalid_m_or_n = -39,
- error_n_out_of_range = -40,
- error_lat_1_2_unspecified = -41,
- error_abs_lat1_eq_abs_lat2 = -42,
- error_lat_0_half_pi_from_mean = -43,
- error_unparseable_cs_def = -44,
- error_geocentric = -45,
- error_unknown_prime_meridian = -46,
- error_axis = -47,
- error_grid_area = -48,
- error_invalid_sweep_axis = -49,
- error_malformed_pipeline = -50,
- error_unit_factor_less_than_0 = -51,
- error_invalid_scale = -52,
- error_non_convergent = -53,
- error_missing_args = -54,
- error_lat_0_is_zero = -55,
- error_ellipsoidal_unsupported = -56,
- error_too_many_inits = -57,
- error_invalid_arg = -58
- };
- static const char *
- pj_err_list[] = {
- "no arguments in initialization list",
- "no options found in 'init' file",
- "no colon in init= string",
- "projection not named",
- "unknown projection id",
- "effective eccentricity = 1.",
- "unknown unit conversion id",
- "invalid boolean param argument",
- "unknown elliptical parameter name",
- "reciprocal flattening (1/f) = 0",
- "|radius reference latitude| > 90",
- "squared eccentricity < 0",
- "major axis or radius = 0 or not given",
- "latitude or longitude exceeded limits",
- "invalid x or y",
- "improperly formed DMS value",
- "non-convergent inverse meridional dist",
- "non-convergent inverse phi2",
- "acos/asin: |arg| >1.+1e-14",
- "tolerance condition error",
- "conic lat_1 = -lat_2",
- "lat_1 >= 90",
- "lat_1 = 0",
- "lat_ts >= 90",
- "no distance between control points",
- "projection not selected to be rotated",
- "W <= 0 or M <= 0",
- "lsat not in 1-5 range",
- "path not in range",
- "h <= 0",
- "k <= 0",
- "lat_0 = 0 or 90 or alpha = 90",
- "lat_1=lat_2 or lat_1=0 or lat_2=90",
- "elliptical usage required",
- "invalid UTM zone number",
- "arg(s) out of range for Tcheby eval",
- "failed to find projection to be rotated",
- "failed to load datum shift file",
- "both n & m must be spec'd and > 0",
- "n <= 0, n > 1 or not specified",
- "lat_1 or lat_2 not specified",
- "|lat_1| == |lat_2|",
- "lat_0 is pi/2 from mean lat",
- "unparseable coordinate system definition",
- "geocentric transformation missing z or ellps",
- "unknown prime meridian conversion id",
- "illegal axis orientation combination",
- "point not within available datum shift grids",
- "invalid sweep axis, choose x or y",
- "malformed pipeline",
- "unit conversion factor must be > 0",
- "invalid scale",
- "non-convergent computation",
- "missing required arguments",
- "lat_0 = 0",
- "ellipsoidal usage unsupported",
- "only one +init allowed for non-pipeline operations",
- "argument not numerical or out of range",
-
- };
- inline std::string pj_generic_strerrno(std::string const& msg, int err)
- {
- std::stringstream ss;
- ss << msg << " (" << err << ")";
- return ss.str();
- }
- inline std::string pj_strerrno(int err) {
- if (0==err)
- {
- return "";
- }
- else if (err > 0)
- {
-
-
- switch(err)
- {
- #ifdef EINVAL
- case EINVAL:
- return "Invalid argument";
- #endif
- #ifdef EDOM
- case EDOM:
- return "Math argument out of domain of func";
- #endif
- #ifdef ERANGE
- case ERANGE:
- return "Math result not representable";
- #endif
- default:
- return pj_generic_strerrno("system error", err);
- }
- }
- else
- {
- size_t adjusted_err = - err - 1;
- if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *)))
- {
- return(pj_err_list[adjusted_err]);
- }
- else
- {
- return pj_generic_strerrno("invalid projection system error", err);
- }
- }
- }
- }
- }}}
- #endif
|