diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-12-15 00:51:46 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-12-15 01:13:43 +0100 |
| commit | 244a24104ded3a4573aeffa32160af21f76cbce6 (patch) | |
| tree | f3a11529172719657cf7576e062e45e0f9452db5 | |
| parent | 1e9894b0e2b161e61546672bccb85a9ef21df541 (diff) | |
| download | PROJ-244a24104ded3a4573aeffa32160af21f76cbce6.tar.gz PROJ-244a24104ded3a4573aeffa32160af21f76cbce6.zip | |
Revise error codes to have a reduced set exposed in the public API.
Fixes #2482
And also add proj_context_errno_string()
Revise gie 'expect failure errno XXXX' strings
140 files changed, 2450 insertions, 2119 deletions
diff --git a/scripts/reference_exported_symbols.txt b/scripts/reference_exported_symbols.txt index 167b8a27..a5fd41ca 100644 --- a/scripts/reference_exported_symbols.txt +++ b/scripts/reference_exported_symbols.txt @@ -784,6 +784,7 @@ proj_context_create proj_context_delete_cpp_context(projCppContext*) proj_context_destroy proj_context_errno +proj_context_errno_string proj_context_get_database_metadata proj_context_get_database_path proj_context_get_url_endpoint @@ -992,7 +993,7 @@ proj_list_get_count proj_list_operations proj_list_prime_meridians proj_list_units -proj_log_error(PJconsts*, char const*, ...) +proj_log_error(PJconsts const*, char const*, ...) proj_log_func proj_log_level proj_lp_dist diff --git a/src/4D_api.cpp b/src/4D_api.cpp index d6eb901d..612be716 100644 --- a/src/4D_api.cpp +++ b/src/4D_api.cpp @@ -176,7 +176,8 @@ double proj_roundtrip (PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord) { return HUGE_VAL; if (n < 1) { - proj_errno_set (P, EINVAL); + proj_log_error(P, _("n should be >= 1")); + proj_errno_set (P, PROJ_ERR_OTHER_API_MISUSE); return HUGE_VAL; } @@ -294,7 +295,7 @@ similarly, but prefers the 2D resp. 3D interfaces if available. if( iRetry > 0 ) { const int oldErrno = proj_errno_reset(P); if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) { - pj_log(P->ctx, PJ_LOG_DEBUG, proj_errno_string(oldErrno)); + pj_log(P->ctx, PJ_LOG_DEBUG, proj_context_errno_string(P->ctx, oldErrno)); } pj_log(P->ctx, PJ_LOG_DEBUG, "Did not result in valid result. " @@ -312,7 +313,7 @@ similarly, but prefers the 2D resp. 3D interfaces if available. } PJ_COORD res = direction == PJ_FWD ? pj_fwd4d( coord, alt.pj ) : pj_inv4d( coord, alt.pj ); - if( proj_errno(alt.pj) == PJD_ERR_NETWORK_ERROR ) { + if( proj_errno(alt.pj) == PROJ_ERR_OTHER_NETWORK_ERROR ) { return proj_coord_error (); } if( res.xyzt.x != HUGE_VAL ) { @@ -359,21 +360,14 @@ similarly, but prefers the 2D resp. 3D interfaces if available. } } - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_NO_OPERATION); return proj_coord_error (); } - switch (direction) { - case PJ_FWD: - return pj_fwd4d (coord, P); - case PJ_INV: - return pj_inv4d (coord, P); - default: - break; - } - - proj_errno_set (P, EINVAL); - return proj_coord_error (); + if (direction == PJ_FWD) + return pj_fwd4d (coord, P); + else + return pj_inv4d (coord, P); } @@ -500,9 +494,6 @@ size_t proj_trans_generic ( break; case PJ_IDENT: return nmin; - default: - proj_errno_set (P, EINVAL); - return 0; } /* Arrays of length==0 are broadcast as the constant 0 */ @@ -771,7 +762,7 @@ PJ *pj_create_internal (PJ_CONTEXT *ctx, const char *definition) { n = strlen (definition); args = (char *) malloc (n + 1); if (nullptr==args) { - proj_context_errno_set(ctx, ENOMEM); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } strcpy (args, definition); @@ -779,14 +770,14 @@ PJ *pj_create_internal (PJ_CONTEXT *ctx, const char *definition) { argc = pj_trim_argc (args); if (argc==0) { free (args); - proj_context_errno_set(ctx, PJD_ERR_NO_ARGS); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } argv = pj_trim_argv (argc, args); if (!argv) { free(args); - proj_context_errno_set(ctx, ENOMEM); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } @@ -821,14 +812,14 @@ indicator, as in {"+proj=utm", "+zone=32"}, or leave it out, as in {"proj=utm", if (nullptr==ctx) ctx = pj_get_default_ctx (); if (nullptr==argv) { - proj_context_errno_set(ctx, PJD_ERR_NO_ARGS); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } /* We assume that free format is used, and build a full proj_create compatible string */ c = pj_make_args (argc, argv); if (nullptr==c) { - proj_context_errno_set(ctx, ENOMEM); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /* ENOMEM */); return nullptr; } @@ -849,14 +840,14 @@ Same as proj_create_argv() but calls pj_create_internal() instead of proj_create if (nullptr==ctx) ctx = pj_get_default_ctx (); if (nullptr==argv) { - proj_context_errno_set(ctx, PJD_ERR_NO_ARGS); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } /* We assume that free format is used, and build a full proj_create compatible string */ c = pj_make_args (argc, argv); if (nullptr==c) { - proj_context_errno_set(ctx, ENOMEM); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } diff --git a/src/aasincos.cpp b/src/aasincos.cpp index c4314c67..ca33663b 100644 --- a/src/aasincos.cpp +++ b/src/aasincos.cpp @@ -14,7 +14,7 @@ aasin(PJ_CONTEXT *ctx,double v) { if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) - proj_context_errno_set( ctx, PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE ); + proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); return (v < 0. ? -M_HALFPI : M_HALFPI); } return asin(v); @@ -26,7 +26,7 @@ aacos(PJ_CONTEXT *ctx, double v) { if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) - proj_context_errno_set( ctx, PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE ); + proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); return (v < 0. ? M_PI : 0.); } return acos(v); diff --git a/src/apps/gie.cpp b/src/apps/gie.cpp index b504b922..95c7da34 100644 --- a/src/apps/gie.cpp +++ b/src/apps/gie.cpp @@ -951,7 +951,15 @@ Tell GIE what to expect, when transforming the ACCEPTed input if (expect_failure_with_errno) { if (proj_errno (T.P)==expect_failure_with_errno) return another_succeeding_failure (); - fprintf (T.fout, "errno=%d, expected=%d\n", proj_errno (T.P), expect_failure_with_errno); + //fprintf (T.fout, "errno=%d, expected=%d\n", proj_errno (T.P), expect_failure_with_errno); + banner (T.operation); + errmsg (3, "%serrno=%s (%d), expected=%d at line %d\n", + delim, + err_const_from_errno(proj_errno(T.P)), + proj_errno (T.P), + expect_failure_with_errno, + F->lineno + ); return another_failing_failure (); } @@ -1107,85 +1115,32 @@ static int dispatch (const char *cmnd, const char *args) { namespace { // anonymous namespace struct errno_vs_err_const {const char *the_err_const; int the_errno;}; static const struct errno_vs_err_const lookup[] = { - {"pjd_err_no_args" , -1}, - {"pjd_err_no_option_in_init_file" , -2}, - {"pjd_err_no_colon_in_init_string" , -3}, - {"pjd_err_proj_not_named" , -4}, - {"pjd_err_unknown_projection_id" , -5}, - {"pjd_err_invalid_eccentricity" , -6}, - {"pjd_err_unknown_unit_id" , -7}, - {"pjd_err_invalid_boolean_param" , -8}, - {"pjd_err_unknown_ellp_param" , -9}, - {"pjd_err_rev_flattening_is_zero" , -10}, - {"pjd_err_ref_rad_larger_than_90" , -11}, - {"pjd_err_es_less_than_zero" , -12}, - {"pjd_err_major_axis_not_given" , -13}, - {"pjd_err_lat_or_lon_exceed_limit" , -14}, - {"pjd_err_invalid_x_or_y" , -15}, - {"pjd_err_wrong_format_dms_value" , -16}, - {"pjd_err_non_conv_inv_meri_dist" , -17}, - {"pjd_err_non_conv_sinhpsi2tanphi" , -18}, - {"pjd_err_acos_asin_arg_too_large" , -19}, - {"pjd_err_tolerance_condition" , -20}, - {"pjd_err_conic_lat_equal" , -21}, - {"pjd_err_lat_larger_than_90" , -22}, - {"pjd_err_lat1_is_zero" , -23}, - {"pjd_err_lat_ts_larger_than_90" , -24}, - {"pjd_err_control_point_no_dist" , -25}, - {"pjd_err_no_rotation_proj" , -26}, - {"pjd_err_w_or_m_zero_or_less" , -27}, - {"pjd_err_lsat_not_in_range" , -28}, - {"pjd_err_path_not_in_range" , -29}, - {"pjd_err_invalid_h" , -30}, - {"pjd_err_k_less_than_zero" , -31}, - {"pjd_err_lat_1_or_2_zero_or_90" , -32}, - {"pjd_err_lat_0_or_alpha_eq_90" , -33}, - {"pjd_err_ellipsoid_use_required" , -34}, - {"pjd_err_invalid_utm_zone" , -35}, - {"" , -36}, /* no longer used */ - {"pjd_err_failed_to_find_proj" , -37}, - {"pjd_err_failed_to_load_grid" , -38}, - {"pjd_err_invalid_m_or_n" , -39}, - {"pjd_err_n_out_of_range" , -40}, - {"pjd_err_lat_1_2_unspecified" , -41}, - {"pjd_err_abs_lat1_eq_abs_lat2" , -42}, - {"pjd_err_lat_0_half_pi_from_mean" , -43}, - {"pjd_err_unparseable_cs_def" , -44}, - {"pjd_err_geocentric" , -45}, - {"pjd_err_unknown_prime_meridian" , -46}, - {"pjd_err_axis" , -47}, - {"pjd_err_grid_area" , -48}, - {"pjd_err_invalid_sweep_axis" , -49}, - {"pjd_err_malformed_pipeline" , -50}, - {"pjd_err_unit_factor_less_than_0" , -51}, - {"pjd_err_invalid_scale" , -52}, - {"pjd_err_non_convergent" , -53}, - {"pjd_err_missing_args" , -54}, - {"pjd_err_lat_0_is_zero" , -55}, - {"pjd_err_ellipsoidal_unsupported" , -56}, - {"pjd_err_too_many_inits" , -57}, - {"pjd_err_invalid_arg" , -58}, - {"pjd_err_inconsistent_unit" , -59}, - {"pjd_err_mutually_exclusive_args" , -60}, - {"pjd_err_generic_error" , -61}, - {"pjd_err_network_error" , -62}, - {"pjd_err_dont_skip" , 5555}, - {"pjd_err_unknown" , 9999}, - {"pjd_err_enomem" , ENOMEM}, + + { "invalid_op", PROJ_ERR_INVALID_OP }, + { "invalid_op_wrong_syntax", PROJ_ERR_INVALID_OP_WRONG_SYNTAX }, + { "invalid_op_missing_arg", PROJ_ERR_INVALID_OP_MISSING_ARG }, + { "invalid_op_illegal_arg_value", PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE }, + { "invalid_op_mutually_exclusive_args", PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS }, + { "invalid_op_file_not_found_or_invalid", PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID }, + { "coord_transfm", PROJ_ERR_COORD_TRANSFM }, + { "coord_transfm_invalid_coord", PROJ_ERR_COORD_TRANSFM_INVALID_COORD }, + { "coord_transfm_outside_projection_domain", PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN }, + { "coord_transfm_no_operation", PROJ_ERR_COORD_TRANSFM_NO_OPERATION }, + { "coord_transfm_outside_grid", PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID }, + { "coord_transfm_grid_at_nodata", PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA }, + { "other", PROJ_ERR_OTHER }, + { "api_misuse", PROJ_ERR_OTHER_API_MISUSE }, + { "no_inverse_op", PROJ_ERR_OTHER_NO_INVERSE_OP }, + { "network_error", PROJ_ERR_OTHER_NETWORK_ERROR }, }; } // anonymous namespace -static const struct errno_vs_err_const unknown = {"PJD_ERR_UNKNOWN", 9999}; - - static int list_err_codes (void) { int i; const int n = sizeof lookup / sizeof lookup[0]; for (i = 0; i < n; i++) { - if (9999==lookup[i].the_errno) - break; - fprintf (T.fout, "%25s (%2.2d): %s\n", lookup[i].the_err_const + 8, + fprintf (T.fout, "%25s (%2.2d): %s\n", lookup[i].the_err_const, lookup[i].the_errno, proj_errno_string (lookup[i].the_errno)); } return 0; @@ -1198,9 +1153,9 @@ static const char *err_const_from_errno (int err) { for (i = 0; i < n; i++) { if (err==lookup[i].the_errno) - return lookup[i].the_err_const + 8; + return lookup[i].the_err_const; } - return unknown.the_err_const; + return "unknown"; } @@ -1226,14 +1181,6 @@ static int errno_from_err_const (const char *err_const) { /* Else try to find a matching identifier */ len = strlen (tolower_err_const); - /* First try to find a match excluding the PJD_ERR_ prefix */ - for (i = 0; i < n; i++) { - if (strlen(lookup[i].the_err_const) > 8 && - 0==strncmp (lookup[i].the_err_const + 8, err_const, len)) - return lookup[i].the_errno; - } - - /* If that did not work, try with the full name */ for (i = 0; i < n; i++) { if (0==strncmp (lookup[i].the_err_const, err_const, len)) return lookup[i].the_errno; diff --git a/src/conversions/axisswap.cpp b/src/conversions/axisswap.cpp index 1aa339c3..c02bd4e5 100644 --- a/src/conversions/axisswap.cpp +++ b/src/conversions/axisswap.cpp @@ -174,13 +174,16 @@ PJ *CONVERSION(axisswap,0) { unsigned int i, j, n = 0; if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = (void *) Q; /* +order and +axis are mutually exclusive */ if ( !pj_param_exists(P->params, "order") == !pj_param_exists(P->params, "axis") ) - return pj_default_destructor(P, PJD_ERR_AXIS); + { + proj_log_error(P, _("order and axis parameters are mutually exclusive.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS); + } /* fill axis list with indices from 4-7 to simplify duplicate search further down */ for (i=0; i<4; i++) { @@ -196,8 +199,8 @@ PJ *CONVERSION(axisswap,0) { /* check that all characters are valid */ for (i=0; i<strlen(order); i++) if (strchr("1234-,", order[i]) == nullptr) { - proj_log_error(P, "axisswap: unknown axis '%c'", order[i]); - return pj_default_destructor(P, PJD_ERR_AXIS); + proj_log_error(P, _("axisswap: unknown axis '%c'"), order[i]); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* read axes numbers and signs */ @@ -206,8 +209,8 @@ PJ *CONVERSION(axisswap,0) { while ( *s != '\0' && n < 4 ) { Q->axis[n] = abs(atoi(s))-1; if (Q->axis[n] > 3) { - proj_log_error(P, "axisswap: invalid axis '%d'", Q->axis[n]); - return pj_default_destructor(P, PJD_ERR_AXIS); + proj_log_error(P, _("axisswap: invalid axis '%d'"), Q->axis[n]); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->sign[n++] = sign(atoi(s)); while ( *s != '\0' && *s != ',' ) @@ -247,8 +250,8 @@ PJ *CONVERSION(axisswap,0) { Q->axis[i] = 2; break; default: - proj_log_error(P, "axisswap: unknown axis '%c'", P->axis[i]); - return pj_default_destructor(P, PJD_ERR_AXIS); + proj_log_error(P, _("axisswap: unknown axis '%c'"), P->axis[i]); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } n = 3; @@ -260,8 +263,8 @@ PJ *CONVERSION(axisswap,0) { if (i==j) continue; if (Q->axis[i] == Q->axis[j]) { - proj_log_error(P, "swapaxis: duplicate axes specified"); - return pj_default_destructor(P, PJD_ERR_AXIS); + proj_log_error(P, _("swapaxis: duplicate axes specified")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } @@ -282,8 +285,8 @@ PJ *CONVERSION(axisswap,0) { if (P->fwd4d == nullptr && P->fwd3d == nullptr && P->fwd == nullptr) { - proj_log_error(P, "swapaxis: bad axis order"); - return pj_default_destructor(P, PJD_ERR_AXIS); + proj_log_error(P, _("swapaxis: bad axis order")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (pj_param(P->ctx, P->params, "tangularunits").i) { diff --git a/src/conversions/set.cpp b/src/conversions/set.cpp index 2f30bda8..3db6db10 100644 --- a/src/conversions/set.cpp +++ b/src/conversions/set.cpp @@ -42,7 +42,7 @@ PJ *OPERATION(set, 0) { auto set = static_cast<struct Set*>(calloc (1, sizeof(struct Set))); P->opaque = set; if (nullptr==P->opaque) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); if (pj_param_exists(P->params, "v_1")) { diff --git a/src/conversions/topocentric.cpp b/src/conversions/topocentric.cpp index f6f328ad..4f563d9f 100644 --- a/src/conversions/topocentric.cpp +++ b/src/conversions/topocentric.cpp @@ -78,7 +78,7 @@ PJ *CONVERSION(topocentric,1) { /*********************************************************************/ struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = static_cast<void *>(Q); // The topocentric origin can be specified either in geocentric coordinates @@ -97,26 +97,30 @@ PJ *CONVERSION(topocentric,1) { const auto hash0 = pj_param_exists(P->params, "h_0"); if( !hasX0 && !hasLon0 ) { - return pj_default_destructor(P, PJD_ERR_MISSING_ARGS); + proj_log_error(P, _("topocentric: missing X_0 or lon_0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if ( (hasX0 || hasY0 || hasZ0) && (hasLon0 || hasLat0 || hash0) ) { - return pj_default_destructor(P, PJD_ERR_MUTUALLY_EXCLUSIVE_ARGS); + proj_log_error(P, _("topocentric: (X_0,Y_0,Z_0) and (lon_0,lat_0,h_0) are mutually exclusive")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS); } if( hasX0 && (!hasY0 || !hasZ0) ) { - return pj_default_destructor(P, PJD_ERR_MISSING_ARGS); + proj_log_error(P, _("topocentric: missing Y_0 and/or Z_0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if( hasLon0 && !hasLat0 ) // allow missing h_0 { - return pj_default_destructor(P, PJD_ERR_MISSING_ARGS); + proj_log_error(P, _("topocentric: missing lat_0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } // Pass a dummy ellipsoid definition that will be overridden just afterwards PJ* cart = proj_create(P->ctx, "+proj=cart +a=1"); if (cart == nullptr) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); /* inherit ellipsoid definition from P to cart */ pj_inherit_ellipsoid_def (P, cart); diff --git a/src/conversions/unitconvert.cpp b/src/conversions/unitconvert.cpp index 61bccbf1..fec8caac 100644 --- a/src/conversions/unitconvert.cpp +++ b/src/conversions/unitconvert.cpp @@ -443,7 +443,7 @@ PJ *CONVERSION(unitconvert,0) { int z_out_is_linear = -1; /* unknown */ if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = (void *) Q; P->fwd4d = forward_4d; @@ -473,7 +473,10 @@ PJ *CONVERSION(unitconvert,0) { } else { f = pj_param (P->ctx, P->params, "dxy_in").f; if (f == 0.0 || 1.0 / f == 0.0) - return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); + { + proj_log_error(P, _("unitconvert: unknown xy_in unit")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } Q->xy_factor = f; if (normalized_name != nullptr) { @@ -492,7 +495,10 @@ PJ *CONVERSION(unitconvert,0) { } else { f = pj_param (P->ctx, P->params, "dxy_out").f; if (f == 0.0 || 1.0 / f == 0.0) - return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); + { + proj_log_error(P, _("unitconvert: unknown xy_out unit")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } Q->xy_factor /= f; if (normalized_name != nullptr) { @@ -505,8 +511,8 @@ PJ *CONVERSION(unitconvert,0) { if( xy_in_is_linear >= 0 && xy_out_is_linear >= 0 && xy_in_is_linear != xy_out_is_linear ) { - proj_log_debug(P, "inconsistent unit type between xy_in and xy_out"); - return pj_default_destructor(P, PJD_ERR_INCONSISTENT_UNIT); + proj_log_error(P, _("unitconvert: inconsistent unit type between xy_in and xy_out")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if ((name = pj_param (P->ctx, P->params, "sz_in").s) != nullptr) { @@ -517,7 +523,10 @@ PJ *CONVERSION(unitconvert,0) { } else { f = pj_param (P->ctx, P->params, "dz_in").f; if (f == 0.0 || 1.0 / f == 0.0) - return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); + { + proj_log_error(P, _("unitconvert: unknown z_in unit")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } Q->z_factor = f; } @@ -530,21 +539,28 @@ PJ *CONVERSION(unitconvert,0) { } else { f = pj_param (P->ctx, P->params, "dz_out").f; if (f == 0.0 || 1.0 / f == 0.0) - return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); + { + proj_log_error(P, _("unitconvert: unknown z_out unit")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } Q->z_factor /= f; } if( z_in_is_linear >= 0 && z_out_is_linear >= 0 && z_in_is_linear != z_out_is_linear ) { - proj_log_debug(P, "inconsistent unit type between z_in and z_out"); - return pj_default_destructor(P, PJD_ERR_INCONSISTENT_UNIT); + proj_log_error(P, _("unitconvert: inconsistent unit type between z_in and z_out")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if ((name = pj_param (P->ctx, P->params, "st_in").s) != nullptr) { for (i = 0; (s = time_units[i].id) && strcmp(name, s) ; ++i); - if (!s) return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); /* unknown unit conversion id */ + if (!s) + { + proj_log_error(P, _("unitconvert: unknown t_in unit")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->t_in_id = i; proj_log_trace(P, "t_in unit: %s", time_units[i].name); @@ -554,7 +570,11 @@ PJ *CONVERSION(unitconvert,0) { if ((name = pj_param (P->ctx, P->params, "st_out").s) != nullptr) { for (i = 0; (s = time_units[i].id) && strcmp(name, s) ; ++i); - if (!s) return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); /* unknown unit conversion id */ + if (!s) + { + proj_log_error(P, _("unitconvert: unknown t_out unit")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->t_out_id = i; proj_log_trace(P, "t_out unit: %s", time_units[i].name); diff --git a/src/datum_set.cpp b/src/datum_set.cpp index 3f612633..e7853a53 100644 --- a/src/datum_set.cpp +++ b/src/datum_set.cpp @@ -25,7 +25,6 @@ * DEALINGS IN THE SOFTWARE. *****************************************************************************/ -#include <errno.h> #include <string.h> #include "proj.h" @@ -71,7 +70,8 @@ int pj_datum_set(PJ_CONTEXT *ctx, paralist *pl, PJ *projdef) for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {} if (!s) { - proj_context_errno_set(ctx, PJD_ERR_UNKNOWN_ELLP_PARAM); + pj_log (ctx, PJ_LOG_ERROR, _("Unknown value for datum")); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return 1; } @@ -87,7 +87,7 @@ int pj_datum_set(PJ_CONTEXT *ctx, paralist *pl, PJ *projdef) auto param = pj_mkparam(entry); if (nullptr == param) { - proj_context_errno_set(ctx, ENOMEM); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/); return 1; } curr->next = param; @@ -99,7 +99,7 @@ int pj_datum_set(PJ_CONTEXT *ctx, paralist *pl, PJ *projdef) auto param = pj_mkparam(pj_datums[i].defn); if (nullptr == param) { - proj_context_errno_set(ctx, ENOMEM); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/); return 1; } curr->next = param; diff --git a/src/dmstor.cpp b/src/dmstor.cpp index 24887a11..4c7408cf 100644 --- a/src/dmstor.cpp +++ b/src/dmstor.cpp @@ -61,7 +61,7 @@ dmstor_ctx(PJ_CONTEXT *ctx, const char *is, char **rs) { n = 2; break; case 'r': case 'R': if (nl) { - proj_context_errno_set( ctx, PJD_ERR_WRONG_FORMAT_DMS_VALUE ); + proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE ); return HUGE_VAL; } ++s; @@ -73,7 +73,7 @@ dmstor_ctx(PJ_CONTEXT *ctx, const char *is, char **rs) { continue; } if (n < nl) { - proj_context_errno_set( ctx, PJD_ERR_WRONG_FORMAT_DMS_VALUE ); + proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE ); return HUGE_VAL; } v += tv * vm[n]; diff --git a/src/ell_set.cpp b/src/ell_set.cpp index afa962c5..a3e7d650 100644 --- a/src/ell_set.cpp +++ b/src/ell_set.cpp @@ -1,6 +1,5 @@ /* set ellipsoid parameters a and es */ -#include <errno.h> #include <math.h> #include <stddef.h> #include <string.h> @@ -147,23 +146,29 @@ static int ellps_ellps (PJ *P) { /* Then look up the right size and shape parameters from the builtin list */ if (strlen (par->param) < 7) - return proj_errno_set (P, PJD_ERR_INVALID_ARG); + { + proj_log_error(P, _("Invalid value for +ellps")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } name = par->param + 6; ellps = pj_find_ellps (name); if (nullptr==ellps) - return proj_errno_set (P, PJD_ERR_UNKNOWN_ELLP_PARAM); + { + proj_log_error(P, _("Unrecognized value for +ellps")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } /* Now, get things ready for ellps_size/ellps_shape, make them do their thing */ err = proj_errno_reset (P); paralist* new_params = pj_mkparam (ellps->major); if (nullptr == new_params) - return proj_errno_set (P, ENOMEM); + return proj_errno_set (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); new_params->next = pj_mkparam (ellps->ell); if (nullptr == new_params->next) { free(new_params); - return proj_errno_set (P, ENOMEM); + return proj_errno_set (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } paralist* old_params = P->params; P->params = new_params; @@ -207,15 +212,26 @@ static int ellps_size (PJ *P) { if (nullptr==par) par = pj_get_param (P->params, "a"); if (nullptr==par) - return a_was_set? 0: proj_errno_set (P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN); + { + if( a_was_set ) + return 0; + proj_log_error(P, _("Major axis not given")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } P->def_size = pj_strdup(par->param); par->used = 1; P->a = pj_atof (pj_param_value (par)); if (P->a <= 0) - return proj_errno_set (P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN); + { + proj_log_error(P, _("Invalid value for major axis")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (HUGE_VAL==P->a) - return proj_errno_set (P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN); + { + proj_log_error(P, _("Invalid value for major axis")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if ('R'==par->param[0]) { P->es = P->f = P->e = P->rf = 0; @@ -264,10 +280,11 @@ static int ellps_shape (PJ *P) { /* reverse flattening, rf */ case 0: P->rf = pj_atof (pj_param_value (par)); - if (HUGE_VAL==P->rf) - return proj_errno_set (P, PJD_ERR_INVALID_ARG); - if (0==P->rf) - return proj_errno_set (P, PJD_ERR_REV_FLATTENING_IS_ZERO); + if (HUGE_VAL==P->rf || P->rf <= 0) + { + proj_log_error(P, _("Invalid value for rf. Should be > 0")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } P->f = 1 / P->rf; P->es = 2*P->f - P->f*P->f; break; @@ -275,8 +292,11 @@ static int ellps_shape (PJ *P) { /* flattening, f */ case 1: P->f = pj_atof (pj_param_value (par)); - if (HUGE_VAL==P->f) - return proj_errno_set (P, PJD_ERR_INVALID_ARG); + if (HUGE_VAL==P->f || P->f < 0) + { + proj_log_error(P, _("Invalid value for f. Should be >= 0")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } P->rf = P->f != 0.0 ? 1.0/P->f: HUGE_VAL; P->es = 2*P->f - P->f*P->f; @@ -285,42 +305,49 @@ static int ellps_shape (PJ *P) { /* eccentricity squared, es */ case 2: P->es = pj_atof (pj_param_value (par)); - if (HUGE_VAL==P->es) - return proj_errno_set (P, PJD_ERR_INVALID_ARG); - if (P->es >= 1) - return proj_errno_set (P, PJD_ERR_INVALID_ECCENTRICITY); + if (HUGE_VAL==P->es || P->es < 0 || P->es >= 1) + { + proj_log_error(P, _("Invalid value for es. Should be in [0,1[ range")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } break; /* eccentricity, e */ case 3: P->e = pj_atof (pj_param_value (par)); - if (HUGE_VAL==P->e) - return proj_errno_set (P, PJD_ERR_INVALID_ARG); - if (P->e < 0 || P->e >= 1) - return proj_errno_set (P, PJD_ERR_INVALID_ECCENTRICITY); + if (HUGE_VAL==P->e || P->e < 0 || P->e >= 1) + { + proj_log_error(P, _("Invalid value for e. Should be in [0,1[ range")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } P->es = P->e * P->e; break; /* semiminor axis, b */ case 4: P->b = pj_atof (pj_param_value (par)); - if (HUGE_VAL==P->b) - return proj_errno_set (P, PJD_ERR_INVALID_ARG); - if (P->b <= 0) - return proj_errno_set (P, PJD_ERR_INVALID_ECCENTRICITY); + if (HUGE_VAL==P->b || P->b <= 0) + { + proj_log_error(P, _("Invalid value for b. Should be > 0")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (P->b==P->a) break; P->f = (P->a - P->b) / P->a; P->es = 2*P->f - P->f*P->f; break; default: - return PJD_ERR_INVALID_ARG; + // shouldn't happen + return PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } // Written that way to catch NaN if (!(P->es >= 0)) - return proj_errno_set (P, PJD_ERR_ES_LESS_THAN_ZERO); + { + proj_log_error(P, _("Invalid eccentricity")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } return 0; } @@ -384,7 +411,7 @@ static int ellps_spherification (PJ *P) { /* R_h - a sphere with R = the harmonic mean of the ellipsoid */ case 4: if (P->a + P->b == 0) - return proj_errno_set (P, PJD_ERR_TOLERANCE_CONDITION); + return proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); P->a = (2*P->a * P->b) / (P->a + P->b); break; @@ -395,11 +422,15 @@ static int ellps_spherification (PJ *P) { v = pj_param_value (par); t = proj_dmstor (v, &endp); if (fabs (t) > M_HALFPI) - return proj_errno_set (P, PJD_ERR_REF_RAD_LARGER_THAN_90); + { + proj_log_error(P, _("Invalid value for lat_g. |lat_g| should be <= 90°")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } t = sin (t); t = 1 - P->es * t * t; if (t == 0.) { - return proj_errno_set(P, PJD_ERR_INVALID_ECCENTRICITY); + proj_log_error(P, _("Invalid eccentricity")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (i==5) /* arithmetic */ P->a *= (1. - P->es + t) / (2 * t * sqrt(t)); @@ -409,7 +440,8 @@ static int ellps_spherification (PJ *P) { } if (P->a <= 0.) { - return proj_errno_set(P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN); + proj_log_error(P, _("Invalid or missing major axis")); + return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* Clean up the ellipsoidal parameters to reflect the sphere */ @@ -552,8 +584,9 @@ int pj_calc_ellipsoid_params (PJ *P, double a, double es) { if (0==P->f) P->f = 1 - cos (P->alpha); /* = 1 - sqrt (1 - PIN->es); */ if (P->f == 1.0) { - proj_context_errno_set( P->ctx, PJD_ERR_INVALID_ECCENTRICITY); - return PJD_ERR_INVALID_ECCENTRICITY; + proj_log_error(P, _("Invalid eccentricity")); + proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + return PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } P->rf = P->f != 0.0 ? 1.0/P->f: HUGE_VAL; @@ -573,8 +606,9 @@ int pj_calc_ellipsoid_params (PJ *P, double a, double es) { P->one_es = 1. - P->es; if (P->one_es == 0.) { - proj_context_errno_set( P->ctx, PJD_ERR_INVALID_ECCENTRICITY); - return PJD_ERR_INVALID_ECCENTRICITY; + proj_log_error(P, _("Invalid eccentricity")); + proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + return PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } P->rone_es = 1./P->one_es; diff --git a/src/factors.cpp b/src/factors.cpp index ff733d07..d6c24f01 100644 --- a/src/factors.cpp +++ b/src/factors.cpp @@ -36,8 +36,15 @@ int pj_factors(PJ_LP lp, const PJ *P, double h, struct FACTORS *fac) { fac->code = 0; /* Check for latitude or longitude overange */ - if ((fabs (lp.phi)-M_HALFPI) > EPS || fabs (lp.lam) > 10.) { - proj_errno_set (P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT); + if ((fabs (lp.phi)-M_HALFPI) > EPS ) + { + proj_log_error(P, _("Invalid latitude")); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD); + return 1; + } + if( fabs (lp.lam) > 10.) { + proj_log_error(P, _("Invalid longitude")); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD); return 1; } @@ -62,7 +69,8 @@ int pj_factors(PJ_LP lp, const PJ *P, double h, struct FACTORS *fac) { /* Derivatives */ if (pj_deriv (lp, h, P, &(fac->der))) { - proj_errno_set (P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT); + proj_log_error(P, _("Invalid latitude or longitude")); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD); return 1; } diff --git a/src/fwd.cpp b/src/fwd.cpp index 962a5051..97ba5999 100644 --- a/src/fwd.cpp +++ b/src/fwd.cpp @@ -52,10 +52,19 @@ static PJ_COORD fwd_prepare (PJ *P, PJ_COORD coo) { /* check for latitude or longitude over-range */ t = (coo.lp.phi < 0 ? -coo.lp.phi : coo.lp.phi) - M_HALFPI; - if (t > PJ_EPS_LAT || coo.lp.lam > 10 || coo.lp.lam < -10) { - proj_errno_set (P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT); + if (t > PJ_EPS_LAT) + { + proj_log_error(P, _("Invalid latitude")); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD); return proj_coord_error (); } + if (coo.lp.lam > 10 || coo.lp.lam < -10) + { + proj_log_error(P, _("Invalid longitude")); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD); + return proj_coord_error (); + } + /* Clamp latitude to -90..90 degree range */ if (coo.lp.phi > M_HALFPI) @@ -186,7 +195,7 @@ PJ_XY pj_fwd(PJ_LP lp, PJ *P) { else if (P->fwd4d) coo = P->fwd4d (coo, P); else { - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error ().xy; } if (HUGE_VAL==coo.v[0]) @@ -220,7 +229,7 @@ PJ_XYZ pj_fwd3d(PJ_LPZ lpz, PJ *P) { else if (P->fwd) coo.xy = P->fwd (coo.lp, P); else { - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error ().xyz; } if (HUGE_VAL==coo.v[0]) @@ -250,7 +259,7 @@ PJ_COORD pj_fwd4d (PJ_COORD coo, PJ *P) { else if (P->fwd) coo.xy = P->fwd (coo.lp, P); else { - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error (); } if (HUGE_VAL==coo.v[0]) diff --git a/src/gauss.cpp b/src/gauss.cpp index 96bd5166..07d0433a 100644 --- a/src/gauss.cpp +++ b/src/gauss.cpp @@ -109,6 +109,6 @@ PJ_LP pj_inv_gauss(PJ_CONTEXT *ctx, PJ_LP slp, const void *data) { } /* convergence failed */ if (!i) - proj_context_errno_set(ctx, PJD_ERR_NON_CONV_INV_MERI_DIST); + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return (elp); } diff --git a/src/generic_inverse.cpp b/src/generic_inverse.cpp index ddd5060b..41cf6c50 100644 --- a/src/generic_inverse.cpp +++ b/src/generic_inverse.cpp @@ -109,6 +109,7 @@ PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial) { lp.phi = M_HALFPI; } } - proj_context_errno_set(P->ctx, PJD_ERR_NON_CONVERGENT); + proj_context_errno_set(P->ctx, + PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } diff --git a/src/grids.cpp b/src/grids.cpp index 871e21ed..fb5966eb 100644 --- a/src/grids.cpp +++ b/src/grids.cpp @@ -197,7 +197,9 @@ GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx, /* Read the header. */ /* -------------------------------------------------------------------- */ if (fp->read(header, sizeof(header)) != sizeof(header)) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + pj_log(ctx, PJ_LOG_ERROR, _("Cannot read grid header")); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -222,8 +224,9 @@ GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx, if (xorigin < -360 || xorigin > 360 || yorigin < -90 || yorigin > 90) { pj_log(ctx, PJ_LOG_ERROR, - "gtx file header has invalid extents, corrupt?"); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + _("gtx file header has invalid extents, corrupt?")); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -258,7 +261,8 @@ bool GTXVerticalShiftGrid::valueAt(int x, int y, float &out) const { m_fp->seek(40 + sizeof(float) * (y * m_width + x)); if (m_fp->read(&out, sizeof(out)) != sizeof(out)) { - proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(m_ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (IS_LSB) { @@ -621,7 +625,7 @@ bool GTiffGrid::valueAt(uint16 sample, int x, int yFromBottom, try { m_buffer.resize(blockSize); } catch (const std::exception &e) { - pj_log(m_ctx, PJ_LOG_ERROR, "Exception %s", e.what()); + pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); return false; } } @@ -642,7 +646,7 @@ bool GTiffGrid::valueAt(uint16 sample, int x, int yFromBottom, m_cache.insert(m_ifdIdx, blockId, m_buffer); } catch (const std::exception &e) { // Should normally not happen - pj_log(m_ctx, PJ_LOG_ERROR, "Exception %s", e.what()); + pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); } } @@ -847,35 +851,35 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { TIFFGetField(m_hTIFF, TIFFTAG_IMAGEWIDTH, &width); TIFFGetField(m_hTIFF, TIFFTAG_IMAGELENGTH, &height); if (width == 0 || height == 0 || width > INT_MAX || height > INT_MAX) { - pj_log(m_ctx, PJ_LOG_ERROR, "Invalid image size"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Invalid image size")); return nullptr; } uint16 samplesPerPixel = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel)) { - pj_log(m_ctx, PJ_LOG_ERROR, "Missing SamplesPerPixel tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Missing SamplesPerPixel tag")); return nullptr; } if (samplesPerPixel == 0) { - pj_log(m_ctx, PJ_LOG_ERROR, "Invalid SamplesPerPixel value"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Invalid SamplesPerPixel value")); return nullptr; } uint16 bitsPerSample = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_BITSPERSAMPLE, &bitsPerSample)) { - pj_log(m_ctx, PJ_LOG_ERROR, "Missing BitsPerSample tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Missing BitsPerSample tag")); return nullptr; } uint16 planarConfig = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_PLANARCONFIG, &planarConfig)) { - pj_log(m_ctx, PJ_LOG_ERROR, "Missing PlanarConfig tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Missing PlanarConfig tag")); return nullptr; } uint16 sampleFormat = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_SAMPLEFORMAT, &sampleFormat)) { - pj_log(m_ctx, PJ_LOG_ERROR, "Missing SampleFormat tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Missing SampleFormat tag")); return nullptr; } @@ -893,9 +897,8 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { else if (sampleFormat == SAMPLEFORMAT_IEEEFP && bitsPerSample == 64) dt = TIFFDataType::Float64; else { - pj_log( - m_ctx, PJ_LOG_ERROR, - "Unsupported combination of SampleFormat and BitsPerSample values"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported combination of SampleFormat " + "and BitsPerSample values")); return nullptr; } @@ -903,7 +906,7 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { if (!TIFFGetField(m_hTIFF, TIFFTAG_PHOTOMETRIC, &photometric)) photometric = PHOTOMETRIC_MINISBLACK; if (photometric != PHOTOMETRIC_MINISBLACK) { - pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported Photometric value"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported Photometric value")); return nullptr; } @@ -914,19 +917,19 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { if (compression != COMPRESSION_NONE && !TIFFIsCODECConfigured(compression)) { pj_log(m_ctx, PJ_LOG_ERROR, - "Cannot open TIFF file due to missing codec."); + _("Cannot open TIFF file due to missing codec.")); return nullptr; } // We really don't want to try dealing with old-JPEG images if (compression == COMPRESSION_OJPEG) { - pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported compression method."); + pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported compression method.")); return nullptr; } const auto blockSize = TIFFIsTiled(m_hTIFF) ? TIFFTileSize64(m_hTIFF) : TIFFStripSize64(m_hTIFF); if (blockSize == 0 || blockSize > 64 * 1024 * 2014) { - pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported block size."); + pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported block size.")); return nullptr; } @@ -942,12 +945,12 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { } else { if (count < 4 || (count % 4) != 0) { pj_log(m_ctx, PJ_LOG_ERROR, - "Wrong number of values in GeoKeys tag"); + _("Wrong number of values in GeoKeys tag")); return nullptr; } if (geokeys[0] != 1) { - pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported GeoTIFF major version"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported GeoTIFF major version")); return nullptr; } // We only know that we support GeoTIFF 1.0 and 1.1 at that time @@ -971,9 +974,9 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { extent.isGeographic = false; } else if (geokeys[i + 3] != ModelTypeGeographic) { pj_log(m_ctx, PJ_LOG_ERROR, - "Only GTModelTypeGeoKey = " - "ModelTypeGeographic or ModelTypeProjected are " - "supported"); + _("Only GTModelTypeGeoKey = " + "ModelTypeGeographic or ModelTypeProjected are " + "supported")); return nullptr; } } else if (geokeys[i] == GTRasterTypeGeoKey) { @@ -996,8 +999,8 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { // a GeoTransformationMatrix, since negative values in GeoPixelScale // have historically been implementation bugs. if (matrix[1] != 0 || matrix[4] != 0) { - pj_log(m_ctx, PJ_LOG_ERROR, "Rotational terms not supported in " - "GeoTransformationMatrix tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("Rotational terms not supported in " + "GeoTransformationMatrix tag")); return nullptr; } @@ -1009,12 +1012,12 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { double *geopixelscale = nullptr; if (TIFFGetField(m_hTIFF, TIFFTAG_GEOPIXELSCALE, &count, &geopixelscale) != 1) { - pj_log(m_ctx, PJ_LOG_ERROR, "No GeoPixelScale tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("No GeoPixelScale tag")); return nullptr; } if (count != 3) { pj_log(m_ctx, PJ_LOG_ERROR, - "Wrong number of values in GeoPixelScale tag"); + _("Wrong number of values in GeoPixelScale tag")); return nullptr; } hRes = geopixelscale[0]; @@ -1023,12 +1026,12 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { double *geotiepoints = nullptr; if (TIFFGetField(m_hTIFF, TIFFTAG_GEOTIEPOINTS, &count, &geotiepoints) != 1) { - pj_log(m_ctx, PJ_LOG_ERROR, "No GeoTiePoints tag"); + pj_log(m_ctx, PJ_LOG_ERROR, _("No GeoTiePoints tag")); return nullptr; } if (count != 6) { pj_log(m_ctx, PJ_LOG_ERROR, - "Wrong number of values in GeoTiePoints tag"); + _("Wrong number of values in GeoTiePoints tag")); return nullptr; } @@ -1059,7 +1062,7 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() { fabs(extent.south) <= M_PI + 1e-5)) && extent.west < extent.east && extent.south < extent.north && extent.resX > 1e-10 && extent.resY > 1e-10)) { - pj_log(m_ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s", + pj_log(m_ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), m_filename.c_str()); return nullptr; } @@ -1279,7 +1282,7 @@ GTiffVGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, const auto subfileType = grid->subfileType(); if (subfileType != 0 && subfileType != FILETYPE_PAGE) { if (ifd == 0) { - pj_log(ctx, PJ_LOG_ERROR, "Invalid subfileType"); + pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG_MAJOR, @@ -1325,7 +1328,7 @@ GTiffVGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, } if (idxSample >= grid->samplesPerPixel()) { - pj_log(ctx, PJ_LOG_ERROR, "Invalid sample index"); + pj_log(ctx, PJ_LOG_ERROR, _("Invalid sample index")); return nullptr; } @@ -1389,16 +1392,17 @@ VerticalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) { auto set = std::unique_ptr<VerticalShiftGridSet>( GTiffVGridShiftSet::open(ctx, std::move(fp), actualName)); if (!set) - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return set; #else pj_log(ctx, PJ_LOG_ERROR, - "TIFF grid, but TIFF support disabled in this build"); + _("TIFF grid, but TIFF support disabled in this build")); return nullptr; #endif } - pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized vertical grid format"); + pj_log(ctx, PJ_LOG_ERROR, _("Unrecognized vertical grid format")); return nullptr; } @@ -1570,7 +1574,8 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, /* Read the header. */ /* -------------------------------------------------------------------- */ if (fp->read(header, sizeof(header)) != sizeof(header)) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -1589,8 +1594,9 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, if (*((int *)(header + 8)) != 12) { pj_log(ctx, PJ_LOG_ERROR, - "NTv1 grid shift file has wrong record count, corrupt?"); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + _("NTv1 grid shift file has wrong record count, corrupt?")); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -1607,9 +1613,10 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, fabs(extent.south) <= M_PI + 1e-5 && extent.west < extent.east && extent.south < extent.north && extent.resX > 1e-10 && extent.resY > 1e-10)) { - pj_log(ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s", + pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), filename.c_str()); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } const int columns = static_cast<int>( @@ -1631,7 +1638,8 @@ bool NTv1Grid::valueAt(int x, int y, bool compensateNTConvention, m_fp->seek(192 + 2 * sizeof(double) * (y * m_width + m_width - 1 - x)); if (m_fp->read(&two_doubles[0], sizeof(two_doubles)) != sizeof(two_doubles)) { - proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(m_ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (IS_LSB) { @@ -1692,7 +1700,8 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, /* Read the header. */ /* -------------------------------------------------------------------- */ if (fp->read(header, sizeof(header)) != sizeof(header)) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -1716,9 +1725,10 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, memcpy(&extent.resY, header + 120, 8); if (!(fabs(extent.west) <= 4 * M_PI && fabs(extent.south) <= M_PI + 1e-5 && extent.resX > 1e-10 && extent.resY > 1e-10)) { - pj_log(ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s", + pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), filename.c_str()); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } int width; @@ -1726,7 +1736,8 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, memcpy(&width, header + 128, 4); memcpy(&height, header + 132, 4); if (width <= 0 || height <= 0) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } extent.east = extent.west + (width - 1) * extent.resX; @@ -1744,7 +1755,8 @@ bool CTable2Grid::valueAt(int x, int y, bool compensateNTConvention, float two_floats[2]; m_fp->seek(160 + 2 * sizeof(float) * (y * m_width + x)); if (m_fp->read(&two_floats[0], sizeof(two_floats)) != sizeof(two_floats)) { - proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(m_ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (!IS_LSB) { @@ -1828,7 +1840,8 @@ bool NTv2Grid::valueAt(int x, int y, bool compensateNTConvention, 4 * sizeof(float) * (static_cast<unsigned long long>(y) * m_width + m_width - 1 - x)); if (m_fp->read(&two_float[0], sizeof(two_float)) != sizeof(two_float)) { - proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(m_ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (m_mustSwap) { @@ -1862,14 +1875,16 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx, /* Read the header. */ /* -------------------------------------------------------------------- */ if (fpRaw->read(header, sizeof(header)) != sizeof(header)) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } constexpr int OFFSET_GS_TYPE = 56; if (memcmp(header + OFFSET_GS_TYPE, "SECONDS", 7) != 0) { - pj_log(ctx, PJ_LOG_ERROR, "Only GS_TYPE=SECONDS is supported"); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + pj_log(ctx, PJ_LOG_ERROR, _("Only GS_TYPE=SECONDS is supported")); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -1899,12 +1914,14 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx, for (unsigned subfile = 0; subfile < num_subfiles; subfile++) { // Read header if (fpRaw->read(header, sizeof(header)) != sizeof(header)) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } if (strncmp(header, "SUB_NAME", 8) != 0) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -1944,9 +1961,10 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx, fabs(extent.south) <= M_PI + 1e-5 && extent.west < extent.east && extent.south < extent.north && extent.resX > 1e-10 && extent.resY > 1e-10)) { - pj_log(ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s", + pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), filename.c_str()); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } const int columns = static_cast<int>( @@ -1964,9 +1982,10 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx, memcpy(&gs_count, header + OFFSET_GS_COUNT, 4); if (gs_count / columns != static_cast<unsigned>(rows)) { pj_log(ctx, PJ_LOG_ERROR, - "GS_COUNT(%u) does not match expected cells (%dx%d)", + _("GS_COUNT(%u) does not match expected cells (%dx%d)"), gs_count, columns, rows); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } @@ -2161,11 +2180,11 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, const auto subfileType = grid->subfileType(); if (subfileType != 0 && subfileType != FILETYPE_PAGE) { if (ifd == 0) { - pj_log(ctx, PJ_LOG_ERROR, "Invalid subfileType"); + pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG_MAJOR, - "Ignoring IFD %d as it has a unsupported subfileType", + _("Ignoring IFD %d as it has a unsupported subfileType"), ifd); continue; } @@ -2174,11 +2193,12 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, if (grid->samplesPerPixel() < 2) { if (ifd == 0) { pj_log(ctx, PJ_LOG_ERROR, - "At least 2 samples per pixel needed"); + _("At least 2 samples per pixel needed")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG_MAJOR, - "Ignoring IFD %d as it has not at least 2 samples", ifd); + _("Ignoring IFD %d as it has not at least 2 samples"), + ifd); continue; } } @@ -2223,19 +2243,21 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, } } if (foundDescriptionForLatOffset && !foundDescriptionForLonOffset) { - pj_log(ctx, PJ_LOG_ERROR, - "Found latitude_offset channel, but not longitude_offset"); + pj_log( + ctx, PJ_LOG_ERROR, + _("Found latitude_offset channel, but not longitude_offset")); return nullptr; } else if (foundDescriptionForLonOffset && !foundDescriptionForLatOffset) { - pj_log(ctx, PJ_LOG_ERROR, - "Found longitude_offset channel, but not latitude_offset"); + pj_log( + ctx, PJ_LOG_ERROR, + _("Found longitude_offset channel, but not latitude_offset")); return nullptr; } if (idxLatShift >= grid->samplesPerPixel() || idxLonShift >= grid->samplesPerPixel()) { - pj_log(ctx, PJ_LOG_ERROR, "Invalid sample index"); + pj_log(ctx, PJ_LOG_ERROR, _("Invalid sample index")); return nullptr; } @@ -2249,7 +2271,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, positiveEast = true; } else { pj_log(ctx, PJ_LOG_ERROR, - "Unsupported value %s for 'positive_value'", + _("Unsupported value %s for 'positive_value'"), positiveValue.c_str()); return nullptr; } @@ -2264,7 +2286,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, grid->metadataItem("UNITTYPE", idxLonShift); if (unitLatShift != unitLonShift) { pj_log(ctx, PJ_LOG_ERROR, - "Different unit for longitude and latitude offset"); + _("Different unit for longitude and latitude offset")); return nullptr; } if (!unitLatShift.empty()) { @@ -2275,7 +2297,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, } else if (unitLatShift == "degree") { convFactorToRadian = M_PI / 180.0; } else { - pj_log(ctx, PJ_LOG_ERROR, "Unsupported unit %s", + pj_log(ctx, PJ_LOG_ERROR, _("Unsupported unit %s"), unitLatShift.c_str()); return nullptr; } @@ -2367,16 +2389,17 @@ HorizontalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) { auto set = std::unique_ptr<HorizontalShiftGridSet>( GTiffHGridShiftSet::open(ctx, std::move(fp), actualName)); if (!set) - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return set; #else pj_log(ctx, PJ_LOG_ERROR, - "TIFF grid, but TIFF support disabled in this build"); + _("TIFF grid, but TIFF support disabled in this build")); return nullptr; #endif } - pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized horizontal grid format"); + pj_log(ctx, PJ_LOG_ERROR, _("Unrecognized horizontal grid format")); return nullptr; } @@ -2628,11 +2651,11 @@ GTiffGenericGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp, const auto subfileType = grid->subfileType(); if (subfileType != 0 && subfileType != FILETYPE_PAGE) { if (ifd == 0) { - pj_log(ctx, PJ_LOG_ERROR, "Invalid subfileType"); + pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG_MAJOR, - "Ignoring IFD %d as it has a unsupported subfileType", + _("Ignoring IFD %d as it has a unsupported subfileType"), ifd); continue; } @@ -2703,16 +2726,17 @@ GenericShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) { auto set = std::unique_ptr<GenericShiftGridSet>( GTiffGenericGridShiftSet::open(ctx, std::move(fp), actualName)); if (!set) - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return set; #else pj_log(ctx, PJ_LOG_ERROR, - "TIFF grid, but TIFF support disabled in this build"); + _("TIFF grid, but TIFF support disabled in this build")); return nullptr; #endif } - pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized generic grid format"); + pj_log(ctx, PJ_LOG_ERROR, _("Unrecognized generic grid format")); return nullptr; } @@ -2785,8 +2809,9 @@ ListOfGenericGrids pj_generic_grid_init(PJ *P, const char *gridkey) { auto gridSet = GenericShiftGridSet::open(P->ctx, gridname); if (!gridSet) { if (!canFail) { - if (proj_context_errno(P->ctx) != PJD_ERR_NETWORK_ERROR) { - proj_context_errno_set(P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + if (proj_context_errno(P->ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) { + proj_context_errno_set( + P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } return {}; } @@ -2830,8 +2855,9 @@ static ListOfHGrids getListOfGridSets(PJ_CONTEXT *ctx, const char *grids) { auto gridSet = HorizontalShiftGridSet::open(ctx, gridname); if (!gridSet) { if (!canFail) { - if (proj_context_errno(ctx) != PJD_ERR_NETWORK_ERROR) { - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + if (proj_context_errno(ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) { + proj_context_errno_set( + ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } return {}; } @@ -3067,7 +3093,7 @@ PJ_LP pj_hgrid_apply(PJ_CONTEXT *ctx, const ListOfHGrids &grids, PJ_LP lp, HorizontalShiftGridSet *gridset = nullptr; const auto grid = findGrid(grids, lp, gridset); if (!grid) { - proj_context_errno_set(ctx, PJD_ERR_GRID_AREA); + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } if (grid->isNullGrid()) { @@ -3083,7 +3109,7 @@ PJ_LP pj_hgrid_apply(PJ_CONTEXT *ctx, const ListOfHGrids &grids, PJ_LP lp, } if (out.lam == HUGE_VAL || out.phi == HUGE_VAL) - proj_context_errno_set(ctx, PJD_ERR_GRID_AREA); + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } @@ -3099,7 +3125,7 @@ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) { HorizontalShiftGridSet *gridset = nullptr; const auto grid = findGrid(grids, lp, gridset); if (!grid) { - proj_context_errno_set(P->ctx, PJD_ERR_GRID_AREA); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } @@ -3107,8 +3133,9 @@ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) { const auto &extent = grid->extentAndRes(); if (!extent.isGeographic) { pj_log(P->ctx, PJ_LOG_ERROR, - "Can only handle grids referenced in a geographic CRS"); - proj_context_errno_set(P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + _("Can only handle grids referenced in a geographic CRS")); + proj_context_errno_set(P->ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return out; } @@ -3131,7 +3158,7 @@ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) { } if (out.lam == HUGE_VAL || out.phi == HUGE_VAL) { - proj_context_errno_set(P->ctx, PJD_ERR_GRID_AREA); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); } return out; @@ -3158,7 +3185,7 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids, } } if (!grid) { - proj_context_errno_set(ctx, PJD_ERR_GRID_AREA); + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return HUGE_VAL; } if (grid->isNullGrid()) { @@ -3168,8 +3195,9 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids, const auto &extent = grid->extentAndRes(); if (!extent.isGeographic) { pj_log(ctx, PJ_LOG_ERROR, - "Can only handle grids referenced in a geographic CRS"); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + _("Can only handle grids referenced in a geographic CRS")); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return HUGE_VAL; } @@ -3200,8 +3228,8 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids, int grid_ix = static_cast<int>(lround(floor(grid_x))); if (!(grid_ix >= 0 && grid_ix < grid->width())) { // in the unlikely case we end up here... - pj_log(ctx, PJ_LOG_ERROR, "grid_ix not in grid"); - proj_context_errno_set(ctx, PJD_ERR_GRID_AREA); + pj_log(ctx, PJ_LOG_ERROR, _("grid_ix not in grid")); + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return HUGE_VAL; } int grid_iy = static_cast<int>(lround(floor(grid_y))); @@ -3268,9 +3296,10 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids, total_weight += weight; n_weights++; } - if (n_weights == 0) + if (n_weights == 0) { + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA); value = HUGE_VAL; - else if (n_weights != 4) + } else if (n_weights != 4) value /= total_weight; return value * vmultiplier; @@ -3309,8 +3338,9 @@ ListOfVGrids pj_vgrid_init(PJ *P, const char *gridkey) { auto gridSet = VerticalShiftGridSet::open(P->ctx, gridname); if (!gridSet) { if (!canFail) { - if (proj_context_errno(P->ctx) != PJD_ERR_NETWORK_ERROR) { - proj_context_errno_set(P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + if (proj_context_errno(P->ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) { + proj_context_errno_set( + P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } return {}; } @@ -3379,7 +3409,8 @@ bool pj_bilinear_interpolation_three_samples( if (!extent.isGeographic) { pj_log(ctx, PJ_LOG_ERROR, "Can only handle grids referenced in a geographic CRS"); - proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_context_errno_set(ctx, + PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } diff --git a/src/init.cpp b/src/init.cpp index 1e89402d..461b44ba 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -30,7 +30,6 @@ #define PJ_LIB__ #include <ctype.h> -#include <errno.h> #include <math.h> #include <stddef.h> #include <stdio.h> @@ -55,7 +54,7 @@ static paralist *string_to_paralist (PJ_CONTEXT *ctx, char *definition) { /* Keep a handle to the start of the list, so we have something to return */ auto param = pj_mkparam_ws (c, &c); if (nullptr==param) { - free_params (ctx, first, ENOMEM); + free_params (ctx, first, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } if (nullptr==last) { @@ -104,7 +103,8 @@ static char *get_init_string (PJ_CONTEXT *ctx, const char *name) { /* Locate the name of the section we search for */ section = strrchr(fname, ':'); if (nullptr==section) { - proj_context_errno_set (ctx, PJD_ERR_NO_COLON_IN_INIT_STRING); + pj_log(ctx, PJ_LOG_ERROR, _("Missing colon in +init")); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); free (fname); return nullptr; } @@ -117,8 +117,9 @@ static char *get_init_string (PJ_CONTEXT *ctx, const char *name) { auto file = NS_PROJ::FileManager::open_resource_file(ctx, fname); if (nullptr==file) { + pj_log(ctx, PJ_LOG_ERROR, _("Cannot open %s"), fname); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); free (fname); - proj_context_errno_set (ctx, PJD_ERR_NO_OPTION_IN_INIT_FILE); return nullptr; } @@ -131,8 +132,9 @@ static char *get_init_string (PJ_CONTEXT *ctx, const char *name) { line = file->read_line(MAX_LINE_LENGTH, maxLenReached, eofReached); /* End of file? */ if (maxLenReached || eofReached) { + pj_log(ctx, PJ_LOG_ERROR, _("Invalid content for %s"), fname); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); free (fname); - proj_context_errno_set (ctx, PJD_ERR_NO_OPTION_IN_INIT_FILE); return nullptr; } @@ -441,7 +443,8 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all ctx->last_errno = 0; if (argc <= 0) { - proj_context_errno_set (ctx, PJD_ERR_NO_ARGS); + pj_log(ctx, PJ_LOG_ERROR, _("No arguments")); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } @@ -455,13 +458,15 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* can't have nested pipelines directly */ if (n_pipelines > 1) { - proj_context_errno_set (ctx, PJD_ERR_MALFORMED_PIPELINE); + pj_log(ctx, PJ_LOG_ERROR, _("Nested pipelines are not supported")); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); return nullptr; } /* don't allow more than one +init in non-pipeline operations */ if (n_pipelines == 0 && n_inits > 1) { - proj_context_errno_set (ctx, PJD_ERR_TOO_MANY_INITS); + pj_log(ctx, PJ_LOG_ERROR, _("Too many inits")); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); return nullptr; } @@ -469,14 +474,14 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* put arguments into internal linked list */ start = curr = pj_mkparam(argv[0]); if (!curr) { - free_params (ctx, start, ENOMEM); + free_params (ctx, start, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } for (i = 1; i < argc; ++i) { curr->next = pj_mkparam(argv[i]); if (!curr->next) { - free_params (ctx, start, ENOMEM); + free_params (ctx, start, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } curr = curr->next; @@ -491,7 +496,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all if (init && n_pipelines == 0) { init = pj_expand_init_internal (ctx, init, allow_init_epsg); if (!init) { - free_params (ctx, start, PJD_ERR_NO_ARGS); + free_params (ctx, start, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); return nullptr; } } @@ -503,19 +508,22 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* Find projection selection */ curr = pj_param_exists (start, "proj"); if (nullptr==curr) { - free_params (ctx, start, PJD_ERR_PROJ_NOT_NAMED); + pj_log(ctx, PJ_LOG_ERROR, _("Missing proj")); + free_params (ctx, start, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } name = curr->param; if (strlen (name) < 6) { - free_params (ctx, start, PJD_ERR_PROJ_NOT_NAMED); + pj_log(ctx, PJ_LOG_ERROR, _("Invalid value for proj")); + free_params (ctx, start, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return nullptr; } name += 5; proj = locate_constructor (name); if (nullptr==proj) { - free_params (ctx, start, PJD_ERR_UNKNOWN_PROJECTION_ID); + pj_log(ctx, PJ_LOG_ERROR, _("Unknown projection")); + free_params (ctx, start, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return nullptr; } @@ -524,7 +532,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* Allocate projection structure */ PIN = proj(nullptr); if (nullptr==PIN) { - free_params (ctx, start, ENOMEM); + free_params (ctx, start, PROJ_ERR_INVALID_OP /*ENOMEM*/); return nullptr; } @@ -550,11 +558,11 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all if (err) { /* Didn't get an ellps, but doesn't need one: Get a free WGS84 */ if (PIN->need_ellps) { - pj_log (ctx, PJ_LOG_DEBUG_MINOR, "pj_init_ctx: Must specify ellipsoid or sphere"); + pj_log (ctx, PJ_LOG_ERROR, _("pj_init_ctx: Must specify ellipsoid or sphere")); return pj_default_destructor (PIN, proj_errno(PIN)); } else { - if (PJD_ERR_MAJOR_AXIS_NOT_GIVEN==proj_errno (PIN)) + if (PIN->a == 0) proj_errno_reset (PIN); PIN->f = 1.0/298.257223563; PIN->a = 6378137.0; @@ -564,7 +572,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all PIN->a_orig = PIN->a; PIN->es_orig = PIN->es; if (pj_calc_ellipsoid_params (PIN, PIN->a, PIN->es)) - return pj_default_destructor (PIN, PJD_ERR_INVALID_ECCENTRICITY); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); /* Now that we have ellipse information check for WGS84 datum */ if( PIN->datum_type == PJD_3PARAM @@ -596,7 +604,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* when correcting longitudes around it */ /* The test is written this way to error on long_wrap_center "=" NaN */ if( !(fabs(PIN->long_wrap_center) < 10 * M_TWOPI) ) - return pj_default_destructor (PIN, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT); + { + proj_log_error(PIN, _("Invalid value for lon_wrap")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } /* Axis orientation */ @@ -605,12 +616,18 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all const char *axis_legal = "ewnsud"; const char *axis_arg = pj_param(ctx, start,"saxis").s; if( strlen(axis_arg) != 3 ) - return pj_default_destructor (PIN, PJD_ERR_AXIS); + { + proj_log_error(PIN, _("Invalid value for axis")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if( strchr( axis_legal, axis_arg[0] ) == nullptr || strchr( axis_legal, axis_arg[1] ) == nullptr || strchr( axis_legal, axis_arg[2] ) == nullptr) - return pj_default_destructor (PIN, PJD_ERR_AXIS); + { + proj_log_error(PIN, _("Invalid value for axis")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } /* TODO: it would be nice to validate we don't have on axis repeated */ strcpy( PIN->axis, axis_arg ); @@ -622,7 +639,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* Central latitude */ PIN->phi0 = pj_param(ctx, start, "rlat_0").f; if( fabs(PIN->phi0) > M_HALFPI ) - return pj_default_destructor (PIN, PJD_ERR_LAT_LARGER_THAN_90); + { + proj_log_error(PIN, _("Invalid value for lat_0: |lat_0| should be <= 90°")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } /* False easting and northing */ PIN->x0 = pj_param(ctx, start, "dx_0").f; @@ -638,7 +658,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all else PIN->k0 = 1.; if (PIN->k0 <= 0.) - return pj_default_destructor (PIN, PJD_ERR_K_LESS_THAN_ZERO); + { + proj_log_error(PIN, _("Invalid value for k/k_0: it should be > 0")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } /* Set units */ units = pj_list_linear_units(); @@ -646,7 +669,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all if ((name = pj_param(ctx, start, "sunits").s) != nullptr) { for (i = 0; (s = units[i].id) && strcmp(name, s) ; ++i) ; if (!s) - return pj_default_destructor (PIN, PJD_ERR_UNKNOWN_UNIT_ID); + { + proj_log_error(PIN, _("Invalid value for units")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } s = units[i].to_meter; } if (s || (s = pj_param(ctx, start, "sto_meter").s)) { @@ -657,11 +683,17 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all ++s; double denom = pj_strtod(s, nullptr); if (denom == 0.0) - return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0); + { + proj_log_error(PIN, _("Invalid value for to_meter donominator")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } PIN->to_meter /= denom; } if (PIN->to_meter <= 0.0) - return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0); + { + proj_log_error(PIN, _("Invalid value for to_meter")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } PIN->fr_meter = 1 / PIN->to_meter; } else @@ -672,7 +704,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all if ((name = pj_param(ctx, start, "svunits").s) != nullptr) { for (i = 0; (s = units[i].id) && strcmp(name, s) ; ++i) ; if (!s) - return pj_default_destructor (PIN, PJD_ERR_UNKNOWN_UNIT_ID); + { + proj_log_error(PIN, _("Invalid value for vunits")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } s = units[i].to_meter; } if (s || (s = pj_param(ctx, start, "svto_meter").s)) { @@ -683,11 +718,17 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all ++s; double denom = pj_strtod(s, nullptr); if (denom == 0.0) - return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0); + { + proj_log_error(PIN, _("Invalid value for vto_meter donominator")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } PIN->vto_meter /= denom; } if (PIN->vto_meter <= 0.0) - return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0); + { + proj_log_error(PIN, _("Invalid value for vto_meter")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } PIN->vfr_meter = 1. / PIN->vto_meter; } else { PIN->vto_meter = PIN->to_meter; @@ -716,7 +757,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all value = name; if (!value) - return pj_default_destructor (PIN, PJD_ERR_UNKNOWN_PRIME_MERIDIAN); + { + proj_log_error(PIN, _("Invalid value for pm")); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } PIN->from_greenwich = dmstor_ctx(ctx,value,nullptr); } else @@ -725,7 +769,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all /* Private object for the geodesic functions */ PIN->geod = static_cast<struct geod_geodesic*>(calloc (1, sizeof (struct geod_geodesic))); if (nullptr==PIN->geod) - return pj_default_destructor (PIN, ENOMEM); + return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP /*ENOMEM*/); geod_init(PIN->geod, PIN->a, (1 - sqrt (1 - PIN->es))); /* Projection specific initialization */ diff --git a/src/internal.cpp b/src/internal.cpp index 9cc48120..b96e2160 100644 --- a/src/internal.cpp +++ b/src/internal.cpp @@ -89,12 +89,9 @@ chained calls starting out with a call to its 2D interface. coo.lp = pj_inv (coo.xy, P); return coo; case PJ_IDENT: - return coo; - default: break; } - proj_errno_set (P, EINVAL); - return proj_coord_error (); + return coo; } @@ -119,12 +116,9 @@ chained calls starting out with a call to its 3D interface. coo.lpz = pj_inv3d (coo.xyz, P); return coo; case PJ_IDENT: - return coo; - default: break; } - proj_errno_set (P, EINVAL); - return proj_coord_error (); + return coo; } /**************************************************************************************/ diff --git a/src/inv.cpp b/src/inv.cpp index 626c9ee5..b4a42189 100644 --- a/src/inv.cpp +++ b/src/inv.cpp @@ -38,7 +38,7 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) { if (coo.v[0] == HUGE_VAL || coo.v[1] == HUGE_VAL || coo.v[2] == HUGE_VAL) { - proj_errno_set (P, PJD_ERR_INVALID_X_OR_Y); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error (); } @@ -97,7 +97,7 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) { static PJ_COORD inv_finalize (PJ *P, PJ_COORD coo) { if (coo.xyz.x == HUGE_VAL) { - proj_errno_set (P, PJD_ERR_INVALID_X_OR_Y); + proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error (); } @@ -163,7 +163,7 @@ PJ_LP pj_inv(PJ_XY xy, PJ *P) { else if (P->inv4d) coo = P->inv4d (coo, P); else { - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error ().lp; } if (HUGE_VAL==coo.v[0]) @@ -197,7 +197,7 @@ PJ_LPZ pj_inv3d (PJ_XYZ xyz, PJ *P) { else if (P->inv) coo.lp = P->inv (coo.xy, P); else { - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error ().lpz; } if (HUGE_VAL==coo.v[0]) @@ -227,7 +227,7 @@ PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P) { else if (P->inv) coo.lp = P->inv (coo.xy, P); else { - proj_errno_set (P, EINVAL); + proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error (); } if (HUGE_VAL==coo.v[0]) diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 6bc1f166..cb0c113a 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -82,7 +82,7 @@ static void PROJ_NO_INLINE proj_log_error(PJ_CONTEXT *ctx, const char *function, auto previous_errno = proj_context_errno(ctx); if (previous_errno == 0) { // only set errno if it wasn't set deeper down the call stack - proj_context_errno_set(ctx, PJD_ERR_GENERIC_ERROR); + proj_context_errno_set(ctx, PROJ_ERR_OTHER); } } @@ -344,6 +344,7 @@ const char *proj_context_get_database_metadata(PJ_CONTEXT *ctx, const char *key) { SANITIZE_CTX(ctx); if (!key) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -375,6 +376,7 @@ PJ_GUESSED_WKT_DIALECT proj_context_guess_wkt_dialect(PJ_CONTEXT *ctx, const char *wkt) { (void)ctx; if (!wkt) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return PJ_GUESSED_NOT_WKT; } @@ -423,6 +425,7 @@ static const char *getOptionValue(const char *option, PJ *proj_clone(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -458,6 +461,7 @@ PJ *proj_clone(PJ_CONTEXT *ctx, const PJ *obj) { PJ *proj_create(PJ_CONTEXT *ctx, const char *text) { SANITIZE_CTX(ctx); if (!text) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -534,6 +538,7 @@ PJ *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt, PROJ_STRING_LIST *out_grammar_errors) { SANITIZE_CTX(ctx); if (!wkt) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -647,6 +652,7 @@ PJ *proj_create_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *const *options) { SANITIZE_CTX(ctx); if (!auth_name || !code) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -752,6 +758,7 @@ int proj_uom_get_info_from_database(PJ_CONTEXT *ctx, const char *auth_name, SANITIZE_CTX(ctx); if (!auth_name || !code) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -804,6 +811,7 @@ int PROJ_DLL proj_grid_get_info_from_database( int *out_direct_download, int *out_open_license, int *out_available) { SANITIZE_CTX(ctx); if (!grid_name) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -863,6 +871,7 @@ PJ_OBJ_LIST *proj_query_geodetic_crs_from_datum(PJ_CONTEXT *ctx, const char *crs_type) { SANITIZE_CTX(ctx); if (!datum_auth_name || !datum_code) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1200,6 +1209,7 @@ int proj_is_deprecated(const PJ *obj) { PJ_OBJ_LIST *proj_get_non_deprecated(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1230,6 +1240,7 @@ static int proj_is_equivalent_to_internal(PJ_CONTEXT *ctx, const PJ *obj, if (!obj || !other) { if (ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); } return false; @@ -1435,6 +1446,7 @@ const char *proj_as_wkt(PJ_CONTEXT *ctx, const PJ *obj, PJ_WKT_TYPE type, const char *const *options) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1536,6 +1548,7 @@ const char *proj_as_proj_string(PJ_CONTEXT *ctx, const PJ *obj, const char *const *options) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1625,6 +1638,7 @@ const char *proj_as_projjson(PJ_CONTEXT *ctx, const PJ *obj, const char *const *options) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1784,6 +1798,7 @@ int proj_get_area_of_use(PJ_CONTEXT *ctx, const PJ *obj, static const GeodeticCRS *extractGeodeticCRS(PJ_CONTEXT *ctx, const PJ *crs, const char *fname) { if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, fname, "missing required input"); return nullptr; } @@ -1841,6 +1856,7 @@ PJ *proj_crs_get_geodetic_crs(PJ_CONTEXT *ctx, const PJ *crs) { PJ *proj_crs_get_sub_crs(PJ_CONTEXT *ctx, const PJ *crs, int index) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1875,6 +1891,7 @@ PJ *proj_crs_create_bound_crs(PJ_CONTEXT *ctx, const PJ *base_crs, const PJ *hub_crs, const PJ *transformation) { SANITIZE_CTX(ctx); if (!base_crs || !hub_crs || !transformation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1934,6 +1951,7 @@ PJ *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx, const PJ *crs, const char *const *options) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -1996,6 +2014,7 @@ PJ *proj_crs_create_bound_vertical_crs(PJ_CONTEXT *ctx, const PJ *vert_crs, const char *grid_name) { SANITIZE_CTX(ctx); if (!vert_crs || !hub_geographic_3D_crs || !grid_name) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -2122,6 +2141,7 @@ int proj_ellipsoid_get_parameters(PJ_CONTEXT *ctx, const PJ *ellipsoid, double *out_inv_flattening) { SANITIZE_CTX(ctx); if (!ellipsoid) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return FALSE; } @@ -2203,6 +2223,7 @@ int proj_prime_meridian_get_parameters(PJ_CONTEXT *ctx, const char **out_unit_name) { SANITIZE_CTX(ctx); if (!prime_meridian) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -2288,6 +2309,7 @@ PJ *proj_get_source_crs(PJ_CONTEXT *ctx, const PJ *obj) { PJ *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -2372,6 +2394,7 @@ PJ_OBJ_LIST *proj_identify(PJ_CONTEXT *ctx, const PJ *obj, int **out_confidence) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -2468,6 +2491,7 @@ PROJ_STRING_LIST proj_get_codes_from_database(PJ_CONTEXT *ctx, int allow_deprecated) { SANITIZE_CTX(ctx); if (!auth_name) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -2824,6 +2848,7 @@ void proj_unit_list_destroy(PROJ_UNIT_INFO **list) { PJ *proj_crs_get_coordoperation(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -2868,6 +2893,7 @@ int proj_coordoperation_get_method_info(PJ_CONTEXT *ctx, const char **out_method_code) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -3416,6 +3442,7 @@ PJ *proj_create_compound_crs(PJ_CONTEXT *ctx, const char *crs_name, SANITIZE_CTX(ctx); if (!horiz_crs || !vert_crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3458,6 +3485,7 @@ PJ *proj_create_compound_crs(PJ_CONTEXT *ctx, const char *crs_name, PJ PROJ_DLL *proj_alter_name(PJ_CONTEXT *ctx, const PJ *obj, const char *name) { SANITIZE_CTX(ctx); if (!obj || !name) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3495,6 +3523,7 @@ PJ PROJ_DLL *proj_alter_id(PJ_CONTEXT *ctx, const PJ *obj, const char *auth_name, const char *code) { SANITIZE_CTX(ctx); if (!obj || !auth_name || !code) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3535,6 +3564,7 @@ PJ *proj_crs_alter_geodetic_crs(PJ_CONTEXT *ctx, const PJ *obj, const PJ *new_geod_crs) { SANITIZE_CTX(ctx); if (!obj || !new_geod_crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3648,6 +3678,7 @@ PJ *proj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ *obj, const char *unit_code) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3700,6 +3731,7 @@ PJ *proj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, const PJ *obj, int convert_to_new_unit) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3745,6 +3777,7 @@ PJ *proj_crs_promote_to_3D(PJ_CONTEXT *ctx, const char *crs_3D_name, const PJ *crs_2D) { SANITIZE_CTX(ctx); if (!crs_2D) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3804,6 +3837,7 @@ PJ *proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx, const PJ *geog_3D_crs) { SANITIZE_CTX(ctx); if (!projected_2D_crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -3889,6 +3923,7 @@ PJ *proj_crs_demote_to_2D(PJ_CONTEXT *ctx, const char *crs_2D_name, const PJ *crs_3D) { SANITIZE_CTX(ctx); if (!crs_3D) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -4097,6 +4132,7 @@ PJ *proj_create_transformation(PJ_CONTEXT *ctx, const char *name, double accuracy) { SANITIZE_CTX(ctx); if (!source_crs || !target_crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -4182,6 +4218,7 @@ PJ *proj_convert_conversion_to_other_method(PJ_CONTEXT *ctx, const char *new_method_name) { SANITIZE_CTX(ctx); if (!conversion) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -4566,6 +4603,7 @@ PJ *proj_create_projected_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *coordinate_system) { SANITIZE_CTX(ctx); if (!geodetic_crs || !conversion || !coordinate_system) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -6897,6 +6935,7 @@ int proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -6942,6 +6981,7 @@ int proj_coordoperation_has_ballpark_transformation(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -6968,6 +7008,7 @@ int proj_coordoperation_get_param_count(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -6996,6 +7037,7 @@ int proj_coordoperation_get_param_index(PJ_CONTEXT *ctx, const char *name) { SANITIZE_CTX(ctx); if (!coordoperation || !name) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } @@ -7057,6 +7099,7 @@ int proj_coordoperation_get_param( const char **out_unit_code, const char **out_unit_category) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -7186,6 +7229,7 @@ int proj_coordoperation_get_towgs84_values(PJ_CONTEXT *ctx, int emit_error_if_incompatible) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -7225,6 +7269,7 @@ int proj_coordoperation_get_grid_used_count(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -7418,6 +7463,7 @@ void proj_operation_factory_context_set_desired_accuracy( double accuracy) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7449,6 +7495,7 @@ void proj_operation_factory_context_set_area_of_interest( double north_lat_degree) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7478,6 +7525,7 @@ void proj_operation_factory_context_set_crs_extent_use( PROJ_CRS_EXTENT_USE use) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7527,6 +7575,7 @@ void PROJ_DLL proj_operation_factory_context_set_spatial_criterion( PROJ_SPATIAL_CRITERION criterion) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7564,6 +7613,7 @@ void PROJ_DLL proj_operation_factory_context_set_grid_availability_use( PROJ_GRID_AVAILABILITY_USE use) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7614,6 +7664,7 @@ void proj_operation_factory_context_set_use_proj_alternative_grid_names( int usePROJNames) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7650,6 +7701,7 @@ void proj_operation_factory_context_set_allow_use_intermediate_crs( PROJ_INTERMEDIATE_CRS_USE use) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7691,6 +7743,7 @@ void proj_operation_factory_context_set_allowed_intermediate_crs( const char *const *list_of_auth_name_codes) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7720,6 +7773,7 @@ void PROJ_DLL proj_operation_factory_context_set_discard_superseded( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int discard) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7743,6 +7797,7 @@ void PROJ_DLL proj_operation_factory_context_set_allow_ballpark_transformations( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int allow) { SANITIZE_CTX(ctx); if (!factory_ctx) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } @@ -7840,6 +7895,7 @@ proj_create_operations(PJ_CONTEXT *ctx, const PJ *source_crs, const PJ_OPERATION_FACTORY_CONTEXT *operationContext) { SANITIZE_CTX(ctx); if (!source_crs || !target_crs || !operationContext) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -7951,6 +8007,7 @@ int proj_list_get_count(const PJ_OBJ_LIST *result) { PJ *proj_list_get(PJ_CONTEXT *ctx, const PJ_OBJ_LIST *result, int index) { SANITIZE_CTX(ctx); if (!result) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -7984,6 +8041,7 @@ double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } @@ -8024,6 +8082,7 @@ double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx, PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -8060,6 +8119,7 @@ PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) { PJ *proj_crs_get_datum_ensemble(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -8088,6 +8148,7 @@ int proj_datum_ensemble_get_member_count(PJ_CONTEXT *ctx, const PJ *datum_ensemble) { SANITIZE_CTX(ctx); if (!datum_ensemble) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return 0; } @@ -8114,6 +8175,7 @@ double proj_datum_ensemble_get_accuracy(PJ_CONTEXT *ctx, const PJ *datum_ensemble) { SANITIZE_CTX(ctx); if (!datum_ensemble) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } @@ -8152,6 +8214,7 @@ PJ *proj_datum_ensemble_get_member(PJ_CONTEXT *ctx, const PJ *datum_ensemble, int member_index) { SANITIZE_CTX(ctx); if (!datum_ensemble) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -8191,6 +8254,7 @@ PJ *proj_datum_ensemble_get_member(PJ_CONTEXT *ctx, const PJ *datum_ensemble, PJ *proj_crs_get_datum_forced(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -8225,6 +8289,7 @@ double proj_dynamic_datum_get_frame_reference_epoch(PJ_CONTEXT *ctx, const PJ *datum) { SANITIZE_CTX(ctx); if (!datum) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } @@ -8259,6 +8324,7 @@ double proj_dynamic_datum_get_frame_reference_epoch(PJ_CONTEXT *ctx, PJ *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -8281,6 +8347,7 @@ PJ *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs) { PJ_COORDINATE_SYSTEM_TYPE proj_cs_get_type(PJ_CONTEXT *ctx, const PJ *cs) { SANITIZE_CTX(ctx); if (!cs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return PJ_CS_TYPE_UNKNOWN; } @@ -8330,6 +8397,7 @@ PJ_COORDINATE_SYSTEM_TYPE proj_cs_get_type(PJ_CONTEXT *ctx, const PJ *cs) { int proj_cs_get_axis_count(PJ_CONTEXT *ctx, const PJ *cs) { SANITIZE_CTX(ctx); if (!cs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } @@ -8373,6 +8441,7 @@ int proj_cs_get_axis_info(PJ_CONTEXT *ctx, const PJ *cs, int index, const char **out_unit_code) { SANITIZE_CTX(ctx); if (!cs) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -8526,6 +8595,7 @@ PJ *proj_coordoperation_create_inverse(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } @@ -8557,6 +8627,7 @@ int proj_concatoperation_get_step_count(PJ_CONTEXT *ctx, const PJ *concatoperation) { SANITIZE_CTX(ctx); if (!concatoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } @@ -8590,6 +8661,7 @@ PJ *proj_concatoperation_get_step(PJ_CONTEXT *ctx, const PJ *concatoperation, int i_step) { SANITIZE_CTX(ctx); if (!concatoperation) { + proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } diff --git a/src/log.cpp b/src/log.cpp index 35e276de..edfba140 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -118,13 +118,13 @@ PJ_LOG_LEVEL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level) { /*****************************************************************************/ -void proj_log_error (PJ *P, const char *fmt, ...) { +void proj_log_error (const PJ *P, const char *fmt, ...) { /****************************************************************************** For reporting the most severe events. ******************************************************************************/ va_list args; va_start( args, fmt ); - pj_vlog (pj_get_ctx (P), PJ_LOG_ERROR , fmt, args); + pj_vlog (pj_get_ctx ((PJ*)P), PJ_LOG_ERROR , fmt, args); va_end( args ); } diff --git a/src/mlfn.hpp b/src/mlfn.hpp index 228c65a4..426dcb0e 100644 --- a/src/mlfn.hpp +++ b/src/mlfn.hpp @@ -66,7 +66,7 @@ inline_pj_inv_mlfn(PJ_CONTEXT *ctx, double arg, double es, const double *en, } *sinphi = s; *cosphi = c; - proj_context_errno_set( ctx, PJD_ERR_NON_CONV_INV_MERI_DIST ); + proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); return phi; } diff --git a/src/networkfilemanager.cpp b/src/networkfilemanager.cpp index 9edffaad..102d3d15 100644 --- a/src/networkfilemanager.cpp +++ b/src/networkfilemanager.cpp @@ -1315,7 +1315,7 @@ std::unique_ptr<File> NetworkFile::open(PJ_CONTEXT *ctx, const char *filename) { errorBuffer.resize(strlen(errorBuffer.data())); pj_log(ctx, PJ_LOG_ERROR, "Cannot open %s: %s", filename, errorBuffer.c_str()); - proj_context_errno_set(ctx, PJD_ERR_NETWORK_ERROR); + proj_context_errno_set(ctx, PROJ_ERR_OTHER_NETWORK_ERROR); } bool ok = false; @@ -1404,7 +1404,7 @@ size_t NetworkFile::read(void *buffer, size_t sizeBytes) { &nRead, errorBuffer.size(), &errorBuffer[0], m_ctx->networking.user_data); if (!m_handle) { - proj_context_errno_set(m_ctx, PJD_ERR_NETWORK_ERROR); + proj_context_errno_set(m_ctx, PROJ_ERR_OTHER_NETWORK_ERROR); return 0; } } else { @@ -1420,7 +1420,7 @@ size_t NetworkFile::read(void *buffer, size_t sizeBytes) { pj_log(m_ctx, PJ_LOG_ERROR, "Cannot read in %s: %s", m_url.c_str(), errorBuffer.c_str()); } - proj_context_errno_set(m_ctx, PJD_ERR_NETWORK_ERROR); + proj_context_errno_set(m_ctx, PROJ_ERR_OTHER_NETWORK_ERROR); return 0; } diff --git a/src/param.cpp b/src/param.cpp index 28d6bc3e..a716f9b9 100644 --- a/src/param.cpp +++ b/src/param.cpp @@ -220,7 +220,7 @@ PROJVALUE pj_param (PJ_CONTEXT *ctx, paralist *pl, const char *opt) { value.i = 1; break; default: - proj_context_errno_set (ctx, PJD_ERR_INVALID_BOOLEAN_PARAM); + proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); value.i = 0; break; } diff --git a/src/phi2.cpp b/src/phi2.cpp index 2f258e47..23793557 100644 --- a/src/phi2.cpp +++ b/src/phi2.cpp @@ -103,7 +103,7 @@ double pj_sinhpsi2tanphi(PJ_CONTEXT *ctx, const double taup, const double e) { break; } if (i == 0) - proj_context_errno_set(ctx, PJD_ERR_NON_CONV_SINHPSI2TANPHI); + proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return tau; } diff --git a/src/pipeline.cpp b/src/pipeline.cpp index e9d11604..6a46ebd8 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -96,7 +96,6 @@ Thomas Knudsen, thokn@sdfe.dk, 2016-05-20 #define PJ_LIB__ -#include <errno.h> #include <math.h> #include <stddef.h> #include <string.h> @@ -430,8 +429,8 @@ PJ *OPERATION(pipeline,0) { // proj=pipeline step "x="""," u=" proj=pipeline step ste=""[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline p step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ""x=""""""""""" // Probably an issue with the quoting handling code // But doesn't hurt to add an extra safety check - proj_log_error (P, "Pipeline: too deep recursion"); - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: nested pipelines */ + proj_log_error (P, _("Pipeline: too deep recursion")); + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: nested pipelines */ } P->fwd4d = pipeline_forward_4d; @@ -453,24 +452,24 @@ PJ *OPERATION(pipeline,0) { P->opaque = new (std::nothrow) Pipeline(); if (nullptr==P->opaque) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /* ENOMEM */); argc = (int)argc_params (P->params); auto pipeline = static_cast<struct Pipeline*>(P->opaque); pipeline->argv = argv = argv_params (P->params, argc); if (nullptr==argv) - return destructor (P, ENOMEM); + return destructor (P, PROJ_ERR_INVALID_OP /* ENOMEM */); pipeline->current_argv = current_argv = static_cast<char**>(calloc (argc, sizeof (char *))); if (nullptr==current_argv) - return destructor (P, ENOMEM); + return destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); /* Do some syntactical sanity checking */ for (i = 0; i < argc; i++) { if (0==strcmp (argv_sentinel, argv[i])) { if (-1==i_pipeline) { - proj_log_error (P, "Pipeline: +step before +proj=pipeline"); - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); + proj_log_error (P, _("Pipeline: +step before +proj=pipeline")); + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } if (0==nsteps) i_first_step = i; @@ -480,8 +479,8 @@ PJ *OPERATION(pipeline,0) { if (0==strcmp ("proj=pipeline", argv[i])) { if (-1 != i_pipeline) { - proj_log_error (P, "Pipeline: Nesting only allowed when child pipelines are wrapped in '+init's"); - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: nested pipelines */ + proj_log_error (P, _("Pipeline: Nesting only allowed when child pipelines are wrapped in '+init's")); + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: nested pipelines */ } i_pipeline = i; } @@ -489,10 +488,10 @@ PJ *OPERATION(pipeline,0) { nsteps--; /* Last instance of +step is just a sentinel */ if (-1==i_pipeline) - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: no pipeline def */ + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: no pipeline def */ if (0==nsteps) - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: no pipeline def */ + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: no pipeline def */ set_ellipsoid(P); @@ -532,8 +531,8 @@ PJ *OPERATION(pipeline,0) { /* The step init failed, but possibly without setting errno. If so, we say "malformed" */ int err_to_report = proj_errno(P); if (0==err_to_report) - err_to_report = PJD_ERR_MALFORMED_PIPELINE; - proj_log_error (P, "Pipeline: Bad step definition: %s (%s)", current_argv[0], proj_errno_string (err_to_report)); + err_to_report = PROJ_ERR_INVALID_OP_WRONG_SYNTAX; + proj_log_error (P, _("Pipeline: Bad step definition: %s (%s)"), current_argv[0], proj_context_errno_string (P->ctx, err_to_report)); return destructor (P, err_to_report); /* ERROR: bad pipeline def */ } next_step->parent = P; @@ -562,8 +561,8 @@ PJ *OPERATION(pipeline,0) { (!Q->inverted && (Q->fwd || Q->fwd3d || Q->fwd4d) ) ) { continue; } else { - proj_log_error (P, "Pipeline: A forward operation couldn't be constructed"); - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); + proj_log_error (P, _("Pipeline: A forward operation couldn't be constructed")); + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } } @@ -612,8 +611,8 @@ PJ *OPERATION(pipeline,0) { continue; if ( curr_step_output != next_step_input ) { - proj_log_error (P, "Pipeline: Mismatched units between step %d and %d", i+1, i+2); - return destructor (P, PJD_ERR_MALFORMED_PIPELINE); + proj_log_error (P, _("Pipeline: Mismatched units between step %d and %d"), i+1, i+2); + return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } } @@ -682,7 +681,7 @@ static PJ *setup_pushpop(PJ *P) { auto pushpop = static_cast<struct PushPop*>(calloc (1, sizeof(struct PushPop))); P->opaque = pushpop; if (nullptr==P->opaque) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); if (pj_param_exists(P->params, "v_1")) pushpop->v1 = true; @@ -610,6 +610,33 @@ double PROJ_DLL proj_xyz_dist (PJ_COORD a, PJ_COORD b); /* Geodesic distance (in meter) + fwd and rev azimuth between two points on the ellipsoid */ PJ_COORD PROJ_DLL proj_geod (const PJ *P, PJ_COORD a, PJ_COORD b); +/* PROJ error codes */ + +/** Error codes typically related to coordinate operation initalization + * Note: some of them can also be emitted during coordinate transformation, + * like PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID in case the resource loading + * is differed until it is really needed. + */ +#define PROJ_ERR_INVALID_OP 1024 /* other/unspecified error related to coordinate operation initialization */ +#define PROJ_ERR_INVALID_OP_WRONG_SYNTAX (PROJ_ERR_INVALID_OP+1) /* invalid pipeline structure, missing +proj argument, etc */ +#define PROJ_ERR_INVALID_OP_MISSING_ARG (PROJ_ERR_INVALID_OP+2) /* missing required operation parameter */ +#define PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE (PROJ_ERR_INVALID_OP+3) /* one of the operation parameter has an illegal value */ +#define PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS (PROJ_ERR_INVALID_OP+4) /* mutually exclusive arguments */ +#define PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID (PROJ_ERR_INVALID_OP+5) /* file not found (particular case of PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE) */ + +/** Error codes related to transformation on a specific coordinate */ +#define PROJ_ERR_COORD_TRANSFM 2048 /* other error related to coordinate transformation */ +#define PROJ_ERR_COORD_TRANSFM_INVALID_COORD (PROJ_ERR_COORD_TRANSFM+1) /* for e.g lat > 90deg */ +#define PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN (PROJ_ERR_COORD_TRANSFM+2) /* coordinate is outside of the projection domain. e.g approximate mercator with |longitude - lon_0| > 90deg, or iterative convergence method failed */ +#define PROJ_ERR_COORD_TRANSFM_NO_OPERATION (PROJ_ERR_COORD_TRANSFM+3) /* no operation found, e.g if no match the required accuracy, or if ballpark transformations were asked to not be used and they would be only such candidate */ +#define PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID (PROJ_ERR_COORD_TRANSFM+4) /* point to transform falls outside grid or subgrid */ +#define PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA (PROJ_ERR_COORD_TRANSFM+5) /* point to transform falls in a grid cell that evaluates to nodata */ + +/** Other type of errors */ +#define PROJ_ERR_OTHER 4096 +#define PROJ_ERR_OTHER_API_MISUSE (PROJ_ERR_OTHER+1) /* error related to a misuse of PROJ API */ +#define PROJ_ERR_OTHER_NO_INVERSE_OP (PROJ_ERR_OTHER+2) /* no inverse method available */ +#define PROJ_ERR_OTHER_NETWORK_ERROR (PROJ_ERR_OTHER+3) /* failure when accessing a network resource */ /* Set or read error level */ int PROJ_DLL proj_context_errno (PJ_CONTEXT *ctx); @@ -617,7 +644,8 @@ int PROJ_DLL proj_errno (const PJ *P); int PROJ_DLL proj_errno_set (const PJ *P, int err); int PROJ_DLL proj_errno_reset (const PJ *P); int PROJ_DLL proj_errno_restore (const PJ *P, int err); -const char PROJ_DLL * proj_errno_string (int err); +const char PROJ_DLL * proj_errno_string (int err); /* deprecated. use proj_context_errno_string() */ +const char PROJ_DLL * proj_context_errno_string(PJ_CONTEXT* ctx, int err); PJ_LOG_LEVEL PROJ_DLL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level); void PROJ_DLL proj_log_func (PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf); diff --git a/src/proj_internal.h b/src/proj_internal.h index 32aaa1ec..bf9e5386 100644 --- a/src/proj_internal.h +++ b/src/proj_internal.h @@ -189,7 +189,10 @@ PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P); PJ_COORD PROJ_DLL pj_approx_2D_trans (PJ *P, PJ_DIRECTION direction, PJ_COORD coo); PJ_COORD PROJ_DLL pj_approx_3D_trans (PJ *P, PJ_DIRECTION direction, PJ_COORD coo); -void PROJ_DLL proj_log_error (PJ *P, const char *fmt, ...); +/* Provision for gettext translatable strings */ +#define _(str) (str) + +void PROJ_DLL proj_log_error (const PJ *P, const char *fmt, ...); void proj_log_debug (PJ *P, const char *fmt, ...); void proj_log_trace (PJ *P, const char *fmt, ...); @@ -598,72 +601,6 @@ struct FACTORS { int code; /* always 0 */ }; -/* library errors */ -#define PJD_ERR_NO_ARGS -1 -#define PJD_ERR_NO_OPTION_IN_INIT_FILE -2 -#define PJD_ERR_NO_COLON_IN_INIT_STRING -3 -#define PJD_ERR_PROJ_NOT_NAMED -4 -#define PJD_ERR_UNKNOWN_PROJECTION_ID -5 -#define PJD_ERR_INVALID_ECCENTRICITY -6 -#define PJD_ERR_UNKNOWN_UNIT_ID -7 -#define PJD_ERR_INVALID_BOOLEAN_PARAM -8 -#define PJD_ERR_UNKNOWN_ELLP_PARAM -9 -#define PJD_ERR_REV_FLATTENING_IS_ZERO -10 -#define PJD_ERR_REF_RAD_LARGER_THAN_90 -11 -#define PJD_ERR_ES_LESS_THAN_ZERO -12 -#define PJD_ERR_MAJOR_AXIS_NOT_GIVEN -13 -#define PJD_ERR_LAT_OR_LON_EXCEED_LIMIT -14 -#define PJD_ERR_INVALID_X_OR_Y -15 -#define PJD_ERR_WRONG_FORMAT_DMS_VALUE -16 -#define PJD_ERR_NON_CONV_INV_MERI_DIST -17 -#define PJD_ERR_NON_CONV_SINHPSI2TANPHI -18 -#define PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE -19 -#define PJD_ERR_TOLERANCE_CONDITION -20 -#define PJD_ERR_CONIC_LAT_EQUAL -21 -#define PJD_ERR_LAT_LARGER_THAN_90 -22 -#define PJD_ERR_LAT1_IS_ZERO -23 -#define PJD_ERR_LAT_TS_LARGER_THAN_90 -24 -#define PJD_ERR_CONTROL_POINT_NO_DIST -25 -#define PJD_ERR_NO_ROTATION_PROJ -26 -#define PJD_ERR_W_OR_M_ZERO_OR_LESS -27 -#define PJD_ERR_LSAT_NOT_IN_RANGE -28 -#define PJD_ERR_PATH_NOT_IN_RANGE -29 -#define PJD_ERR_INVALID_H -30 -#define PJD_ERR_K_LESS_THAN_ZERO -31 -#define PJD_ERR_LAT_1_OR_2_ZERO_OR_90 -32 -#define PJD_ERR_LAT_0_OR_ALPHA_EQ_90 -33 -#define PJD_ERR_ELLIPSOID_USE_REQUIRED -34 -#define PJD_ERR_INVALID_UTM_ZONE -35 -/* -36 no longer used */ -#define PJD_ERR_FAILED_TO_FIND_PROJ -37 -#define PJD_ERR_FAILED_TO_LOAD_GRID -38 -#define PJD_ERR_INVALID_M_OR_N -39 -#define PJD_ERR_N_OUT_OF_RANGE -40 -#define PJD_ERR_LAT_1_2_UNSPECIFIED -41 -#define PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 -42 -#define PJD_ERR_LAT_0_HALF_PI_FROM_MEAN -43 -#define PJD_ERR_UNPARSEABLE_CS_DEF -44 -#define PJD_ERR_GEOCENTRIC -45 -#define PJD_ERR_UNKNOWN_PRIME_MERIDIAN -46 -#define PJD_ERR_AXIS -47 -#define PJD_ERR_GRID_AREA -48 -#define PJD_ERR_INVALID_SWEEP_AXIS -49 -#define PJD_ERR_MALFORMED_PIPELINE -50 -#define PJD_ERR_UNIT_FACTOR_LESS_THAN_0 -51 -#define PJD_ERR_INVALID_SCALE -52 -#define PJD_ERR_NON_CONVERGENT -53 -#define PJD_ERR_MISSING_ARGS -54 -#define PJD_ERR_LAT_0_IS_ZERO -55 -#define PJD_ERR_ELLIPSOIDAL_UNSUPPORTED -56 -#define PJD_ERR_TOO_MANY_INITS -57 -#define PJD_ERR_INVALID_ARG -58 -#define PJD_ERR_INCONSISTENT_UNIT -59 -#define PJD_ERR_MUTUALLY_EXCLUSIVE_ARGS -60 -#define PJD_ERR_GENERIC_ERROR -61 -#define PJD_ERR_NETWORK_ERROR -62 -/* NOTE: Remember to update src/strerrno.cpp, src/apps/gie.cpp and transient_error in */ -/* src/transform.cpp when adding new value */ - // Legacy struct projFileAPI_t; @@ -707,6 +644,7 @@ struct projFileApiCallbackAndData /* proj thread context */ struct pj_ctx{ + std::string lastFullErrorMessage{}; // used by proj_context_errno_string int last_errno = 0; int debug_level = 0; void (*logger)(void *, int, const char *) = nullptr; diff --git a/src/proj_mdist.cpp b/src/proj_mdist.cpp index ed07ffd1..9a819861 100644 --- a/src/proj_mdist.cpp +++ b/src/proj_mdist.cpp @@ -124,6 +124,6 @@ proj_inv_mdist(PJ_CONTEXT *ctx, double dist, const void *data) { return phi; } /* convergence failed */ - proj_context_errno_set(ctx, PJD_ERR_NON_CONV_INV_MERI_DIST); + proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return phi; } diff --git a/src/projections/adams.cpp b/src/projections/adams.cpp index d1217ff1..44e98a2c 100644 --- a/src/projections/adams.cpp +++ b/src/projections/adams.cpp @@ -99,7 +99,7 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) { switch (Q->mode) { case GUYOU: if ((fabs(lp.lam) - TOL) > M_PI_2) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } @@ -119,7 +119,7 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) { break; case PEIRCE_Q: { if( lp.phi < -TOL ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } const double sl = sin(lp.lam); @@ -134,7 +134,7 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) { case ADAMS_HEMI: { const double sp = sin(lp.phi); if ((fabs(lp.lam) - TOL) > M_PI_2) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } a = cos(lp.phi) * sin(lp.lam); @@ -208,7 +208,7 @@ static PJ *setup(PJ *P, projection_type mode) { calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->es = 0; diff --git a/src/projections/aea.cpp b/src/projections/aea.cpp index af0f292d..c5b03158 100644 --- a/src/projections/aea.cpp +++ b/src/projections/aea.cpp @@ -107,7 +107,7 @@ static PJ_XY aea_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoid/spheroid, forward struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque); Q->rho = Q->c - (Q->ellips ? Q->n * pj_qsfn(sin(lp.phi), P->e, P->one_es) : Q->n2 * sin(lp.phi));; if (Q->rho < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } Q->rho = Q->dd * sqrt(Q->rho); @@ -134,12 +134,12 @@ static PJ_LP aea_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoid/spheroid, inverse lp.phi = (Q->c - lp.phi * lp.phi) / Q->n; if (fabs(Q->ec - fabs(lp.phi)) > TOL7) { if (fabs(lp.phi) > 2 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = phi1_(lp.phi, P->e, P->one_es); if (lp.phi == HUGE_VAL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } } else @@ -167,10 +167,21 @@ static PJ *setup(PJ *P) { P->inv = aea_e_inverse; P->fwd = aea_e_forward; - if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI) - return destructor(P, PJD_ERR_LAT_LARGER_THAN_90); + if (fabs(Q->phi1) > M_HALFPI) + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be <= 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if (fabs(Q->phi2) > M_HALFPI) + { + proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be <= 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (fabs(Q->phi1 + Q->phi2) < EPS10) - return destructor(P, PJD_ERR_CONIC_LAT_EQUAL); + { + proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } double sinphi = sin(Q->phi1); Q->n = sinphi; double cosphi = cos(Q->phi1); @@ -197,7 +208,8 @@ static PJ *setup(PJ *P) { Q->n = (m1 * m1 - m2 * m2) / (ml2 - ml1); if (Q->n == 0) { // Not quite, but es is very close to 1... - return destructor(P, PJD_ERR_INVALID_ECCENTRICITY); + proj_log_error(P, _("Invalid value for eccentricity")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } Q->ec = 1. - .5 * P->one_es * log((1. - P->e) / @@ -221,7 +233,7 @@ static PJ *setup(PJ *P) { PJ *PROJECTION(aea) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -234,7 +246,7 @@ PJ *PROJECTION(aea) { PJ *PROJECTION(leac) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; diff --git a/src/projections/aeqd.cpp b/src/projections/aeqd.cpp index d5d90b62..2a42f379 100644 --- a/src/projections/aeqd.cpp +++ b/src/projections/aeqd.cpp @@ -149,7 +149,7 @@ static PJ_XY aeqd_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward oblcon: if (fabs(fabs(xy.y) - 1.) < TOL) if (xy.y < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else @@ -168,7 +168,7 @@ oblcon: /*-fallthrough*/ case S_POLE: if (fabs(lp.phi - M_HALFPI) < EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = (M_HALFPI + lp.phi); @@ -239,7 +239,7 @@ static PJ_LP aeqd_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse c_rh = hypot(xy.x, xy.y); if (c_rh > M_PI) { if (c_rh - EPS10 > M_PI) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } c_rh = M_PI; @@ -276,7 +276,7 @@ static PJ_LP aeqd_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse PJ *PROJECTION(aeqd) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; diff --git a/src/projections/airy.cpp b/src/projections/airy.cpp index 15ff60d8..d162aba6 100644 --- a/src/projections/airy.cpp +++ b/src/projections/airy.cpp @@ -74,14 +74,14 @@ static PJ_XY airy_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward if (Q->mode == OBLIQ) cosz = Q->sinph0 * sinphi + Q->cosph0 * cosz; if (!Q->no_cut && cosz < -EPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } s = 1. - cosz; if (fabs(s) > EPS) { t = 0.5 * (1. + cosz); if(t == 0) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } Krho = -log(t)/s - Q->Cb / t; @@ -97,7 +97,7 @@ static PJ_XY airy_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward case N_POLE: lp.phi = fabs(Q->p_halfpi - lp.phi); if (!Q->no_cut && (lp.phi - EPS) > M_HALFPI) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } lp.phi *= 0.5; @@ -122,7 +122,7 @@ PJ *PROJECTION(airy) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; diff --git a/src/projections/aitoff.cpp b/src/projections/aitoff.cpp index 857ebb80..1051c711 100644 --- a/src/projections/aitoff.cpp +++ b/src/projections/aitoff.cpp @@ -123,7 +123,7 @@ static PJ_LP aitoff_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver C = 1. - D * D; const double denom = pow(C, 1.5); if( denom == 0 ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } D = acos(D) / denom; @@ -170,7 +170,7 @@ static PJ_LP aitoff_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver if (iter == MAXITER && round == MAXROUND) { - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); /* fprintf(stderr, "Warning: Accuracy of 1e-12 not reached. Last increments: dlat=%e and dlon=%e\n", dp, dl); */ } @@ -189,7 +189,7 @@ static PJ *setup(PJ *P) { PJ *PROJECTION(aitoff) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->mode = AITOFF; @@ -200,13 +200,16 @@ PJ *PROJECTION(aitoff) { PJ *PROJECTION(wintri) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->mode = WINKEL_TRIPEL; if (pj_param(P->ctx, P->params, "tlat_1").i) { if ((Q->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f)) == 0.) - return pj_default_destructor (P, PJD_ERR_LAT_LARGER_THAN_90); + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } else /* 50d28' or acos(2/pi) */ Q->cosphi1 = 0.636619772367581343; diff --git a/src/projections/bacon.cpp b/src/projections/bacon.cpp index 7ff2a7ac..c236e943 100644 --- a/src/projections/bacon.cpp +++ b/src/projections/bacon.cpp @@ -45,7 +45,7 @@ static PJ_XY bacon_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar PJ *PROJECTION(bacon) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->bacn = 1; @@ -59,7 +59,7 @@ PJ *PROJECTION(bacon) { PJ *PROJECTION(apian) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->bacn = Q->ortl = 0; @@ -72,7 +72,7 @@ PJ *PROJECTION(apian) { PJ *PROJECTION(ortel) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->bacn = 0; diff --git a/src/projections/bertin1953.cpp b/src/projections/bertin1953.cpp index 58509e16..db7aa7c8 100644 --- a/src/projections/bertin1953.cpp +++ b/src/projections/bertin1953.cpp @@ -77,7 +77,7 @@ static PJ_XY bertin1953_s_forward (PJ_LP lp, PJ *P) { PJ *PROJECTION(bertin1953) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->lam0 = 0; diff --git a/src/projections/bipc.cpp b/src/projections/bipc.cpp index 743acd1c..e89e189a 100644 --- a/src/projections/bipc.cpp +++ b/src/projections/bipc.cpp @@ -60,7 +60,7 @@ static PJ_XY bipc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward z = S20 * sphi + C20 * cphi * cdlam; if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else z = z < 0. ? -1. : 1.; @@ -74,7 +74,7 @@ static PJ_XY bipc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward z = S45 * (sphi + cphi * cdlam); if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else z = z < 0. ? -1. : 1.; @@ -84,19 +84,19 @@ static PJ_XY bipc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward xy.y = -rhoc; } if (z < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } t = pow(tan(.5 * z), n); r = F * t; if ((al = .5 * (R104 - z)) < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } al = (t + pow(al, n)) / T; if (fabs(al) > 1.) { if (fabs(al) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else al = al < 0. ? -1. : 1.; @@ -153,7 +153,7 @@ static PJ_LP bipc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse rl = r; } if (! i) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } Az = Av - Az / n; @@ -170,7 +170,7 @@ static PJ_LP bipc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse PJ *PROJECTION(bipc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->noskew = pj_param(P->ctx, P->params, "bns").i; diff --git a/src/projections/bonne.cpp b/src/projections/bonne.cpp index 7817e968..1728a477 100644 --- a/src/projections/bonne.cpp +++ b/src/projections/bonne.cpp @@ -65,7 +65,7 @@ static PJ_LP bonne_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers rh = hypot(xy.x, xy.y); lp.phi = Q->cphi1 + Q->phi1 - rh; if (fabs(lp.phi) > M_HALFPI) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) @@ -91,7 +91,7 @@ static PJ_LP bonne_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers } else if (fabs(s - M_HALFPI) <= EPS10) lp.lam = 0.; else { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return lp; @@ -115,18 +115,21 @@ PJ *PROJECTION(bonne) { double c; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(Q->phi1) < EPS10) - return destructor (P, PJD_ERR_LAT1_IS_ZERO); + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be > 0")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (P->es != 0.0) { Q->en = pj_enfn(P->es); if (nullptr==Q->en) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->am1 = sin(Q->phi1); c = cos(Q->phi1); Q->m1 = pj_mlfn(Q->phi1, Q->am1, c, Q->en); diff --git a/src/projections/calcofi.cpp b/src/projections/calcofi.cpp index d1e96de8..b9528ab9 100644 --- a/src/projections/calcofi.cpp +++ b/src/projections/calcofi.cpp @@ -44,7 +44,7 @@ static PJ_XY calcofi_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forw line as xy xy, r, o form a right triangle */ if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } @@ -73,7 +73,7 @@ static PJ_XY calcofi_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forw double l2; double ry; if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = lp.lam; diff --git a/src/projections/cass.cpp b/src/projections/cass.cpp index f5531f6a..9902f9d7 100644 --- a/src/projections/cass.cpp +++ b/src/projections/cass.cpp @@ -113,12 +113,12 @@ PJ *PROJECTION(cass) { /* otherwise it's ellipsoidal */ P->opaque = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==P->opaque) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->destructor = destructor; static_cast<struct pj_opaque*>(P->opaque)->en = pj_enfn (P->es); if (nullptr==static_cast<struct pj_opaque*>(P->opaque)->en) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); static_cast<struct pj_opaque*>(P->opaque)->m0 = pj_mlfn (P->phi0, sin (P->phi0), cos (P->phi0), static_cast<struct pj_opaque*>(P->opaque)->en); P->inv = cass_e_inverse; diff --git a/src/projections/cc.cpp b/src/projections/cc.cpp index 244e185d..f15a95bd 100644 --- a/src/projections/cc.cpp +++ b/src/projections/cc.cpp @@ -12,7 +12,7 @@ PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph"; static PJ_XY cc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0,0.0}; if (fabs (fabs(lp.phi) - M_HALFPI) <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = lp.lam; diff --git a/src/projections/ccon.cpp b/src/projections/ccon.cpp index 7b3b7105..5f58d536 100644 --- a/src/projections/ccon.cpp +++ b/src/projections/ccon.cpp @@ -84,16 +84,18 @@ PJ *PROJECTION(ccon) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(Q->phi1) < EPS10) - return destructor (P, PJD_ERR_LAT1_IS_ZERO); - + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be > 0")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (!(Q->en = pj_enfn(P->es))) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->sinphi1 = sin(Q->phi1); Q->cosphi1 = cos(Q->phi1); diff --git a/src/projections/cea.cpp b/src/projections/cea.cpp index b7874b90..0d850b49 100644 --- a/src/projections/cea.cpp +++ b/src/projections/cea.cpp @@ -53,7 +53,7 @@ static PJ_LP cea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse lp.phi = asin(xy.y); lp.lam = xy.x / P->k0; } else { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return (lp); @@ -75,15 +75,19 @@ PJ *PROJECTION(cea) { double t = 0.0; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; if (pj_param(P->ctx, P->params, "tlat_ts").i) { - P->k0 = cos(t = pj_param(P->ctx, P->params, "rlat_ts").f); + t = pj_param(P->ctx, P->params, "rlat_ts").f; + P->k0 = cos(t); if (P->k0 < 0.) - return pj_default_destructor (P, PJD_ERR_LAT_TS_LARGER_THAN_90); + { + proj_log_error(P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } if (P->es != 0.0) { t = sin(t); @@ -91,7 +95,7 @@ PJ *PROJECTION(cea) { P->e = sqrt(P->es); Q->apa = pj_authset(P->es); if (!(Q->apa)) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->qp = pj_qsfn(1., P->e, P->one_es); P->inv = cea_e_inverse; diff --git a/src/projections/chamb.cpp b/src/projections/chamb.cpp index b315832a..ca5d6d82 100644 --- a/src/projections/chamb.cpp +++ b/src/projections/chamb.cpp @@ -105,7 +105,7 @@ PJ *PROJECTION(chamb) { char line[10]; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; @@ -123,7 +123,10 @@ PJ *PROJECTION(chamb) { Q->c[i].v = vect(P->ctx,Q->c[j].phi - Q->c[i].phi, Q->c[i].cosphi, Q->c[i].sinphi, Q->c[j].cosphi, Q->c[j].sinphi, Q->c[j].lam - Q->c[i].lam); if (Q->c[i].v.r == 0.0) - return pj_default_destructor (P, PJD_ERR_CONTROL_POINT_NO_DIST); + { + proj_log_error(P, _("Invalid value for control points: they should be distinct")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } /* co-linearity problem ignored for now */ } Q->beta_0 = lc(P->ctx,Q->c[0].v.r, Q->c[2].v.r, Q->c[1].v.r); diff --git a/src/projections/col_urban.cpp b/src/projections/col_urban.cpp index de0c178f..6d8157b6 100644 --- a/src/projections/col_urban.cpp +++ b/src/projections/col_urban.cpp @@ -56,7 +56,7 @@ static PJ_LP col_urban_inverse (PJ_XY xy, PJ *P) { PJ *PROJECTION(col_urban) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; const double h0_unscaled = pj_param(P->ctx, P->params, "dh_0").f; diff --git a/src/projections/collg.cpp b/src/projections/collg.cpp index 1b9d2da7..958dfddb 100644 --- a/src/projections/collg.cpp +++ b/src/projections/collg.cpp @@ -32,7 +32,7 @@ static PJ_LP collg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers if (fabs(lp.phi) < 1.) lp.phi = asin(lp.phi); else if (fabs(lp.phi) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; diff --git a/src/projections/comill.cpp b/src/projections/comill.cpp index 44524990..910d8aa7 100644 --- a/src/projections/comill.cpp +++ b/src/projections/comill.cpp @@ -66,7 +66,7 @@ static PJ_LP comill_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver } } if( i == 0 ) - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); lp.phi = yc; /* longitude */ diff --git a/src/projections/eck2.cpp b/src/projections/eck2.cpp index 0d9fd5fa..891ad30e 100644 --- a/src/projections/eck2.cpp +++ b/src/projections/eck2.cpp @@ -34,7 +34,7 @@ static PJ_LP eck2_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse lp.phi = (4. - lp.phi * lp.phi) * C13; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; diff --git a/src/projections/eck3.cpp b/src/projections/eck3.cpp index 2563053f..cd0ccdf9 100644 --- a/src/projections/eck3.cpp +++ b/src/projections/eck3.cpp @@ -54,7 +54,7 @@ static PJ *setup(PJ *P) { PJ *PROJECTION(eck3) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 0.42223820031577120149; @@ -69,7 +69,7 @@ PJ *PROJECTION(eck3) { PJ *PROJECTION(kav7) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; /* Defined twice in original code - Using 0.866..., @@ -87,7 +87,7 @@ PJ *PROJECTION(kav7) { PJ *PROJECTION(wag6) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 0.94745; @@ -102,7 +102,7 @@ PJ *PROJECTION(wag6) { PJ *PROJECTION(putp1) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 1.89490; diff --git a/src/projections/eqc.cpp b/src/projections/eqc.cpp index 9ebc9286..fd385bb2 100644 --- a/src/projections/eqc.cpp +++ b/src/projections/eqc.cpp @@ -41,11 +41,14 @@ static PJ_LP eqc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse PJ *PROJECTION(eqc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if ((Q->rc = cos(pj_param(P->ctx, P->params, "rlat_ts").f)) <= 0.) - return pj_default_destructor (P, PJD_ERR_LAT_TS_LARGER_THAN_90); + { + proj_log_error(P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } P->inv = eqc_s_inverse; P->fwd = eqc_s_forward; P->es = 0.; diff --git a/src/projections/eqdc.cpp b/src/projections/eqdc.cpp index 28767d74..4f49c136 100644 --- a/src/projections/eqdc.cpp +++ b/src/projections/eqdc.cpp @@ -79,20 +79,32 @@ PJ *PROJECTION(eqdc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; - if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI) - return destructor(P, PJD_ERR_LAT_LARGER_THAN_90); + if (fabs(Q->phi1) > M_HALFPI) + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be <= 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + + if (fabs(Q->phi2) > M_HALFPI) + { + proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be <= 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (fabs(Q->phi1 + Q->phi2) < EPS10) - return destructor (P, PJD_ERR_CONIC_LAT_EQUAL); + { + proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (!(Q->en = pj_enfn(P->es))) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); sinphi = sin(Q->phi1); Q->n = sinphi; @@ -111,7 +123,8 @@ PJ *PROJECTION(eqdc) { (pj_mlfn(Q->phi2, sinphi, cosphi, Q->en) - ml1); if (Q->n == 0) { // Not quite, but es is very close to 1... - return destructor(P, PJD_ERR_INVALID_ECCENTRICITY); + proj_log_error(P, _("Invalid value for eccentricity")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } Q->c = ml1 + m1 / Q->n; @@ -121,7 +134,10 @@ PJ *PROJECTION(eqdc) { if (secant) Q->n = (cosphi - cos(Q->phi2)) / (Q->phi2 - Q->phi1); if (Q->n == 0) - return destructor (P, PJD_ERR_CONIC_LAT_EQUAL); + { + proj_log_error(P, _("Invalid value for lat_1 and lat_2: lat_1 + lat_2 should be > 0")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->c = Q->phi1 + cos(Q->phi1) / Q->n; Q->rho0 = Q->c - P->phi0; } diff --git a/src/projections/eqearth.cpp b/src/projections/eqearth.cpp index 2ef2775b..9600e039 100644 --- a/src/projections/eqearth.cpp +++ b/src/projections/eqearth.cpp @@ -110,7 +110,7 @@ static PJ_LP eqearth_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal/sphe } if( i == 0 ) { - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); return lp; } @@ -145,7 +145,7 @@ static PJ *destructor (PJ *P, int errlev) { /* Destructor */ PJ *PROJECTION(eqearth) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; P->fwd = eqearth_e_forward; @@ -156,7 +156,7 @@ PJ *PROJECTION(eqearth) { if (P->es != 0.0) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ if (nullptr == Q->apa) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ Q->rqda = sqrt(0.5*Q->qp); /* Authalic radius divided by major axis */ } diff --git a/src/projections/fouc_s.cpp b/src/projections/fouc_s.cpp index f7607635..5a560d97 100644 --- a/src/projections/fouc_s.cpp +++ b/src/projections/fouc_s.cpp @@ -57,12 +57,15 @@ static PJ_LP fouc_s_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver PJ *PROJECTION(fouc_s) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->n = pj_param(P->ctx, P->params, "dn").f; if (Q->n < 0. || Q->n > 1.) - return pj_default_destructor (P, PJD_ERR_N_OUT_OF_RANGE); + { + proj_log_error(P, _("Invalid value for n: it should be in [0,1] range.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->n1 = 1. - Q->n; P->es = 0; diff --git a/src/projections/geos.cpp b/src/projections/geos.cpp index 5de4c7ca..8d05dd24 100644 --- a/src/projections/geos.cpp +++ b/src/projections/geos.cpp @@ -99,7 +99,7 @@ static PJ_XY geos_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward /* Check visibility. */ if (((Q->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * Q->radius_p_inv2) < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } @@ -138,7 +138,7 @@ static PJ_LP geos_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse b = 2 * Q->radius_g * Vx; const double det = (b * b) - 4 * a * Q->C; if (det < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } @@ -178,7 +178,7 @@ static PJ_LP geos_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse b = 2 * Q->radius_g * Vx; const double det = (b * b) - 4 * a * Q->C; if (det < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } @@ -201,7 +201,7 @@ PJ *PROJECTION(geos) { char *sweep_axis; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->h = pj_param(P->ctx, P->params, "dh").f; @@ -212,7 +212,10 @@ PJ *PROJECTION(geos) { else { if ((sweep_axis[0] != 'x' && sweep_axis[0] != 'y') || sweep_axis[1] != '\0') - return pj_default_destructor (P, PJD_ERR_INVALID_SWEEP_AXIS); + { + proj_log_error(P, _("Invalid value for sweep: it should be equal to x or y.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (sweep_axis[0] == 'x') Q->flip_axis = 1; @@ -222,7 +225,10 @@ PJ *PROJECTION(geos) { Q->radius_g_1 = Q->h / P->a; if ( Q->radius_g_1 <= 0 || Q->radius_g_1 > 1e10 ) - return pj_default_destructor (P, PJD_ERR_INVALID_H); + { + proj_log_error(P, _("Invalid value for h.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->radius_g = 1. + Q->radius_g_1; Q->C = Q->radius_g * Q->radius_g - 1.0; if (P->es != 0.0) { diff --git a/src/projections/gn_sinu.cpp b/src/projections/gn_sinu.cpp index ef312613..5d3f9491 100644 --- a/src/projections/gn_sinu.cpp +++ b/src/projections/gn_sinu.cpp @@ -46,7 +46,7 @@ static PJ_LP gn_sinu_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inve } else if ((s - EPS10) < M_HALFPI) { lp.lam = 0.; } else { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); } return lp; @@ -71,7 +71,7 @@ static PJ_XY gn_sinu_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forw break; } if (!i) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } @@ -123,12 +123,12 @@ static void setup(PJ *P) { PJ *PROJECTION(sinu) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; if (!(Q->en = pj_enfn(P->es))) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); if (P->es != 0.0) { P->inv = gn_sinu_e_inverse; @@ -145,7 +145,7 @@ PJ *PROJECTION(sinu) { PJ *PROJECTION(eck6) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -160,7 +160,7 @@ PJ *PROJECTION(eck6) { PJ *PROJECTION(mbtfps) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -175,17 +175,33 @@ PJ *PROJECTION(mbtfps) { PJ *PROJECTION(gn_sinu) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; - if (pj_param(P->ctx, P->params, "tn").i && pj_param(P->ctx, P->params, "tm").i) { - Q->n = pj_param(P->ctx, P->params, "dn").f; - Q->m = pj_param(P->ctx, P->params, "dm").f; - if (Q->n <= 0 || Q->m < 0) - return destructor (P, PJD_ERR_INVALID_M_OR_N); - } else - return destructor (P, PJD_ERR_INVALID_M_OR_N); + if (!pj_param(P->ctx, P->params, "tn").i ) + { + proj_log_error(P, _("Missing parameter n.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } + if (!pj_param(P->ctx, P->params, "tm").i ) + { + proj_log_error(P, _("Missing parameter m.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } + + Q->n = pj_param(P->ctx, P->params, "dn").f; + Q->m = pj_param(P->ctx, P->params, "dm").f; + if (Q->n <= 0) + { + proj_log_error(P, _("Invalid value for n: it should be > 0.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if (Q->m < 0) + { + proj_log_error(P, _("Invalid value for m: it should be >= 0.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } setup(P); diff --git a/src/projections/gnom.cpp b/src/projections/gnom.cpp index 9abbb7ce..0d53cfab 100644 --- a/src/projections/gnom.cpp +++ b/src/projections/gnom.cpp @@ -54,7 +54,7 @@ static PJ_XY gnom_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward } if (xy.y <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } @@ -126,7 +126,7 @@ static PJ_LP gnom_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse PJ *PROJECTION(gnom) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) { diff --git a/src/projections/goode.cpp b/src/projections/goode.cpp index c0afd2d8..1107d203 100644 --- a/src/projections/goode.cpp +++ b/src/projections/goode.cpp @@ -64,7 +64,7 @@ static PJ *destructor (PJ *P, int errlev) { /* Destructor */ PJ *PROJECTION(goode) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -72,14 +72,14 @@ PJ *PROJECTION(goode) { Q->sinu = pj_sinu(nullptr); Q->moll = pj_moll(nullptr); if (Q->sinu == nullptr || Q->moll == nullptr) - return destructor (P, ENOMEM); + return destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->sinu->es = 0.; Q->sinu->ctx = P->ctx; Q->moll->ctx = P->ctx; Q->sinu = pj_sinu(Q->sinu); Q->moll = pj_moll(Q->moll); if (Q->sinu == nullptr || Q->moll == nullptr) - return destructor (P, ENOMEM); + return destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->fwd = goode_s_forward; P->inv = goode_s_inverse; diff --git a/src/projections/gstmerc.cpp b/src/projections/gstmerc.cpp index b21f6ffd..8957d05d 100644 --- a/src/projections/gstmerc.cpp +++ b/src/projections/gstmerc.cpp @@ -56,7 +56,7 @@ static PJ_LP gstmerc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inve PJ *PROJECTION(gstmerc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->lamc = P->lam0; diff --git a/src/projections/hammer.cpp b/src/projections/hammer.cpp index d9bcafc7..5a183082 100644 --- a/src/projections/hammer.cpp +++ b/src/projections/hammer.cpp @@ -28,7 +28,7 @@ static PJ_XY hammer_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa lp.lam *= Q->w; double denom = 1. + cosphi * cos(lp.lam); if( denom == 0.0 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } d = sqrt(2./denom); @@ -47,7 +47,7 @@ static PJ_LP hammer_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver if (fabs(2.*z*z-1.) < EPS) { lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; - proj_errno_set(P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); } else { lp.lam = aatan2(Q->w * xy.x * z,2. * z * z - 1)/Q->w; lp.phi = aasin(P->ctx,z * xy.y); @@ -59,19 +59,25 @@ static PJ_LP hammer_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver PJ *PROJECTION(hammer) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if (pj_param(P->ctx, P->params, "tW").i) { Q->w = fabs(pj_param(P->ctx, P->params, "dW").f); if (Q->w <= 0.) - return pj_default_destructor (P, PJD_ERR_W_OR_M_ZERO_OR_LESS); + { + proj_log_error(P, _("Invalid value for W: it should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } else Q->w = .5; if (pj_param(P->ctx, P->params, "tM").i) { Q->m = fabs(pj_param(P->ctx, P->params, "dM").f); if (Q->m <= 0.) - return pj_default_destructor (P, PJD_ERR_W_OR_M_ZERO_OR_LESS); + { + proj_log_error(P, _("Invalid value for M: it should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } else Q->m = 1.; diff --git a/src/projections/hatano.cpp b/src/projections/hatano.cpp index c10c4e35..4897435f 100644 --- a/src/projections/hatano.cpp +++ b/src/projections/hatano.cpp @@ -47,7 +47,7 @@ static PJ_LP hatano_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver th = xy.y * ( xy.y < 0. ? RYCS : RYCN); if (fabs(th) > 1.) { if (fabs(th) > ONETOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { th = th > 0. ? M_HALFPI : - M_HALFPI; @@ -61,7 +61,7 @@ static PJ_LP hatano_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN); if (fabs(lp.phi) > 1.) { if (fabs(lp.phi) > ONETOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = lp.phi > 0. ? M_HALFPI : - M_HALFPI; diff --git a/src/projections/healpix.cpp b/src/projections/healpix.cpp index c778f28f..b6863fad 100644 --- a/src/projections/healpix.cpp +++ b/src/projections/healpix.cpp @@ -524,7 +524,7 @@ static PJ_LP s_healpix_inverse(PJ_XY xy, PJ *P) { /* sphere */ PJ_LP lp; lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; - proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return healpix_spherhealpix_e_inverse(xy); @@ -540,7 +540,7 @@ static PJ_LP e_healpix_inverse(PJ_XY xy, PJ *P) { /* ellipsoid */ if (in_image(xy.x, xy.y, 0, 0, 0) == 0) { lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; - proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp = healpix_spherhealpix_e_inverse(xy); @@ -574,7 +574,7 @@ static PJ_LP s_rhealpix_inverse(PJ_XY xy, PJ *P) { /* sphere */ PJ_LP lp; lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; - proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1); @@ -590,7 +590,7 @@ static PJ_LP e_rhealpix_inverse(PJ_XY xy, PJ *P) { /* ellipsoid */ if (in_image(xy.x, xy.y, 1, Q->north_square, Q->south_square) == 0) { lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; - proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1); @@ -615,7 +615,7 @@ static PJ *destructor (PJ *P, int errlev) { /* Destructor PJ *PROJECTION(healpix) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -625,7 +625,7 @@ PJ *PROJECTION(healpix) { if (P->es != 0.0) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ if (nullptr==Q->apa) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */ pj_calc_ellipsoid_params (P, P->a, P->es); /* Ensure we have a consistent parameter set */ @@ -643,7 +643,7 @@ PJ *PROJECTION(healpix) { PJ *PROJECTION(rhealpix) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -652,13 +652,19 @@ PJ *PROJECTION(rhealpix) { /* Check for valid north_square and south_square inputs. */ if (Q->north_square < 0 || Q->north_square > 3) - return destructor (P, PJD_ERR_AXIS); + { + proj_log_error(P, _("Invalid value for north_square: it should be in [0,3] range.")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (Q->south_square < 0 || Q->south_square > 3) - return destructor (P, PJD_ERR_AXIS); + { + proj_log_error(P, _("Invalid value for south_square: it should be in [0,3] range.")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (P->es != 0.0) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ if (nullptr==Q->apa) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */ P->ra = 1.0/P->a; diff --git a/src/projections/igh.cpp b/src/projections/igh.cpp index 8aaaaba1..9e51addf 100644 --- a/src/projections/igh.cpp +++ b/src/projections/igh.cpp @@ -210,7 +210,7 @@ PJ *PROJECTION(igh) { PJ_LP lp = { 0, phi_boundary }; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; @@ -222,7 +222,7 @@ PJ *PROJECTION(igh) { !setup_zone(P, Q, 7, pj_sinu, d20, 0, d20) || !setup_zone(P, Q, 8, pj_sinu, d140, 0, d140)) { - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } /* mollweide zones */ @@ -243,7 +243,7 @@ PJ *PROJECTION(igh) { !setup_zone(P, Q,11, pj_moll, d20, -Q->dy0, d20) || !setup_zone(P, Q,12, pj_moll, d140, -Q->dy0, d140)) { - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } P->inv = igh_s_inverse; diff --git a/src/projections/igh_o.cpp b/src/projections/igh_o.cpp index 80874845..1a7485e1 100644 --- a/src/projections/igh_o.cpp +++ b/src/projections/igh_o.cpp @@ -224,7 +224,7 @@ PJ *PROJECTION(igh_o) { PJ_LP lp = { 0, phi_boundary }; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; @@ -236,13 +236,13 @@ PJ *PROJECTION(igh_o) { !setup_zone(P, Q, 8, pj_sinu, d20, 0, d20) || !setup_zone(P, Q, 9, pj_sinu, d150, 0, d150)) { - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } /* mollweide zones */ if (!setup_zone(P, Q, 1, pj_moll, -d140, 0, -d140)) { - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } /* y0 ? */ @@ -260,7 +260,7 @@ PJ *PROJECTION(igh_o) { !setup_zone(P, Q, 11, pj_moll, d20, -Q->dy0, d20) || !setup_zone(P, Q, 12, pj_moll, d150, -Q->dy0, d150)) { - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } P->inv = igh_o_s_inverse; diff --git a/src/projections/imw_p.cpp b/src/projections/imw_p.cpp index 6e82d287..6f0bfe5f 100644 --- a/src/projections/imw_p.cpp +++ b/src/projections/imw_p.cpp @@ -34,15 +34,27 @@ static int phi12(PJ *P, double *del, double *sig) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque); int err = 0; - if (!pj_param(P->ctx, P->params, "tlat_1").i || - !pj_param(P->ctx, P->params, "tlat_2").i) { - err = PJD_ERR_LAT_1_2_UNSPECIFIED; - } else { + if (!pj_param(P->ctx, P->params, "tlat_1").i ) + { + proj_log_error(P, _("Missing parameter: lat_1 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else if ( !pj_param(P->ctx, P->params, "tlat_2").i) + { + proj_log_error(P, _("Missing parameter: lat_2 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else + { Q->phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (Q->phi_2 - Q->phi_1); *sig = 0.5 * (Q->phi_2 + Q->phi_1); - err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 : 0; + err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE : 0; + if( err ) + { + proj_log_error(P, _("Illegal value for lat_1 and lat_2: |lat_1 - lat_2| and |lat_1 + lat_2| should be > 0")); + } } return err; } @@ -120,7 +132,7 @@ static PJ_LP imw_p_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers if( denom != 0 || fabs(t.y - xy.y) > TOL ) { if( denom == 0 ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } lp.phi = ((lp.phi - Q->phi_1) * (xy.y - yc) / denom) + Q->phi_1; @@ -133,7 +145,7 @@ static PJ_LP imw_p_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers if( i == N_MAX_ITER ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } @@ -171,10 +183,10 @@ PJ *PROJECTION(imw_p) { int err; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; - if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, ENOMEM); + if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); if( (err = phi12(P, &del, &sig)) != 0) { return destructor(P, err); } diff --git a/src/projections/isea.cpp b/src/projections/isea.cpp index 77a5689b..7a782f3d 100644 --- a/src/projections/isea.cpp +++ b/src/projections/isea.cpp @@ -1026,7 +1026,7 @@ static PJ_XY isea_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward try { out = isea_forward(&Q->dgg, &in); } catch( const char* ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } @@ -1041,7 +1041,7 @@ PJ *PROJECTION(isea) { char *opt; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; @@ -1059,7 +1059,8 @@ PJ *PROJECTION(isea) { } else if (!strcmp(opt, "pole")) { isea_orient_pole(&Q->dgg); } else { - return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED); + proj_log_error(P, _("Invalid value for orient: only isea or pole are supported")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } @@ -1089,8 +1090,8 @@ PJ *PROJECTION(isea) { Q->dgg.output = ISEA_HEX; } else { - /* TODO verify error code. Possibly eliminate magic */ - return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED); + proj_log_error(P, _("Invalid value for mode: only plane, di, dd or hex are supported")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } diff --git a/src/projections/krovak.cpp b/src/projections/krovak.cpp index adc039fe..2afe3672 100644 --- a/src/projections/krovak.cpp +++ b/src/projections/krovak.cpp @@ -181,7 +181,7 @@ static PJ_LP krovak_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, fi1 = lp.phi; } if( i == 0 ) - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); lp.lam -= P->lam0; @@ -193,7 +193,7 @@ PJ *PROJECTION(krovak) { double u0, n0, g; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; /* we want Bessel as fixed ellipsoid */ @@ -225,7 +225,8 @@ PJ *PROJECTION(krovak) { g = pow( (1. + P->e * sin(P->phi0)) / (1. - P->e * sin(P->phi0)) , Q->alpha * P->e / 2. ); double tan_half_phi0_plus_pi_4 = tan(P->phi0 / 2. + M_PI_4); if( tan_half_phi0_plus_pi_4 == 0.0 ) { - return pj_default_destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("Invalid value for lat_0: lat_0 + PI/4 should be different from 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->k = tan( u0 / 2. + M_PI_4) / pow (tan_half_phi0_plus_pi_4 , Q->alpha) * g; n0 = sqrt(1. - P->es) / (1. - P->es * pow(sin(P->phi0), 2)); diff --git a/src/projections/labrd.cpp b/src/projections/labrd.cpp index 4fbcf460..b17e71e9 100644 --- a/src/projections/labrd.cpp +++ b/src/projections/labrd.cpp @@ -107,11 +107,12 @@ PJ *PROJECTION(labrd) { double Az, sinp, R, N, t; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if (P->phi0 == 0.) { - return pj_default_destructor(P, PJD_ERR_LAT_0_IS_ZERO); + proj_log_error(P, _("Invalid value for lat_0: lat_0 should be different from 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Az = pj_param(P->ctx, P->params, "razi").f; diff --git a/src/projections/laea.cpp b/src/projections/laea.cpp index 2d19cab1..5054e8ff 100644 --- a/src/projections/laea.cpp +++ b/src/projections/laea.cpp @@ -65,7 +65,7 @@ static PJ_XY laea_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward break; } if (fabs(b) < EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } @@ -111,7 +111,7 @@ static PJ_XY laea_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward xy.y = 1. + Q->sinb1 * sinphi + Q->cosb1 * cosphi * coslam; oblcon: if (xy.y <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = sqrt(2. / xy.y); @@ -124,7 +124,7 @@ oblcon: /*-fallthrough*/ case S_POLE: if (fabs(lp.phi + P->phi0) < EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = M_FORTPI - lp.phi * .5; @@ -193,7 +193,7 @@ static PJ_LP laea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse rh = hypot(xy.x, xy.y); if ((lp.phi = rh * .5 ) > 1.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = 2. * asin(lp.phi); @@ -244,13 +244,14 @@ PJ *PROJECTION(laea) { double t; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; t = fabs(P->phi0); if (t > M_HALFPI + EPS10 ) { - return destructor(P, PJD_ERR_LAT_LARGER_THAN_90); + proj_log_error(P, _("Invalid value for lat_0: |lat_0| should be <= 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(t - M_HALFPI) < EPS10) Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; @@ -266,7 +267,7 @@ PJ *PROJECTION(laea) { Q->mmf = .5 / (1. - P->es); Q->apa = pj_authset(P->es); if (nullptr==Q->apa) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); switch (Q->mode) { case N_POLE: case S_POLE: diff --git a/src/projections/lagrng.cpp b/src/projections/lagrng.cpp index 1029bf8d..fa680643 100644 --- a/src/projections/lagrng.cpp +++ b/src/projections/lagrng.cpp @@ -35,7 +35,7 @@ static PJ_XY lagrng_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa lp.lam *= Q->rw; c = 0.5 * (v + 1./v) + cos(lp.lam); if (c < TOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = 2. * sin(lp.lam) / c; @@ -59,7 +59,7 @@ static PJ_LP lagrng_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver y2m = 2. - xy.y; c = y2p * y2m - x2; if (fabs(c) < TOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = 2. * atan(pow((y2p * y2p + x2) / (Q->a2 * (y2m * y2m + x2)), Q->hw)) - M_HALFPI; @@ -73,7 +73,7 @@ PJ *PROJECTION(lagrng) { double sin_phi1; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if( pj_param(P->ctx, P->params, "tW").i ) @@ -81,13 +81,19 @@ PJ *PROJECTION(lagrng) { else Q->w = 2; if (Q->w <= 0) - return pj_default_destructor(P, PJD_ERR_W_OR_M_ZERO_OR_LESS); + { + proj_log_error(P, _("Invalid value for W: it should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->hw = 0.5 * Q->w; Q->rw = 1. / Q->w; Q->hrw = 0.5 * Q->rw; sin_phi1 = sin(pj_param(P->ctx, P->params, "rlat_1").f); if (fabs(fabs(sin_phi1) - 1.) < TOL) - return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90); + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->a1 = pow((1. - sin_phi1)/(1. + sin_phi1), Q->hrw); Q->a2 = Q->a1 * Q->a1; diff --git a/src/projections/lcc.cpp b/src/projections/lcc.cpp index 525281f4..42d8b2c9 100644 --- a/src/projections/lcc.cpp +++ b/src/projections/lcc.cpp @@ -27,7 +27,7 @@ static PJ_XY lcc_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward if (fabs(fabs(lp.phi) - M_HALFPI) < EPS10) { if ((lp.phi * Q->n) <= 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } rho = 0.; @@ -62,7 +62,7 @@ static PJ_LP lcc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse if (P->es != 0.) { lp.phi = pj_phi2(P->ctx, pow(rho / Q->c, 1./Q->n), P->e); if (lp.phi == HUGE_VAL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } @@ -83,7 +83,7 @@ PJ *PROJECTION(lcc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc(1, sizeof (struct pj_opaque))); if (nullptr == Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; @@ -94,37 +94,45 @@ PJ *PROJECTION(lcc) { if (!pj_param(P->ctx, P->params, "tlat_0").i) P->phi0 = Q->phi1; } - if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI) - return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90); + if (fabs(Q->phi1 + Q->phi2) < EPS10) - return pj_default_destructor(P, PJD_ERR_CONIC_LAT_EQUAL); + { + proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->n = sinphi = sin(Q->phi1); cosphi = cos(Q->phi1); + + if( fabs(cosphi) < EPS10 || fabs(Q->phi1) >= M_PI_2 ) { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if( fabs(cos(Q->phi2)) < EPS10 || fabs(Q->phi2) >= M_PI_2 ) { + proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + secant = fabs(Q->phi1 - Q->phi2) >= EPS10; if (P->es != 0.) { double ml1, m1; m1 = pj_msfn(sinphi, cosphi, P->es); - if( fabs(Q->phi1) == M_HALFPI ) { - return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90); - } ml1 = pj_tsfn(Q->phi1, sinphi, P->e); if (secant) { /* secant cone */ sinphi = sin(Q->phi2); Q->n = log(m1 / pj_msfn(sinphi, cos(Q->phi2), P->es)); if (Q->n == 0) { // Not quite, but es is very close to 1... - return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY); - } - if( fabs(Q->phi2) == M_HALFPI ) { - return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90); + proj_log_error(P, _("Invalid value for eccentricity")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } const double ml2 = pj_tsfn(Q->phi2, sinphi, P->e); const double denom = log(ml1 / ml2); if( denom == 0 ) { // Not quite, but es is very close to 1... - return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY); + proj_log_error(P, _("Invalid value for eccentricity")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->n /= denom; } @@ -133,9 +141,6 @@ PJ *PROJECTION(lcc) { Q->rho0 *= (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. : pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), Q->n); } else { - if( fabs(cosphi) < EPS10 || fabs(cos(Q->phi2)) < EPS10 ) { - return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90); - } if (secant) Q->n = log(cosphi / cos(Q->phi2)) / log(tan(M_FORTPI + .5 * Q->phi2) / @@ -143,7 +148,8 @@ PJ *PROJECTION(lcc) { if( Q->n == 0 ) { // Likely reason is that phi1 / phi2 are too close to zero. // Can be reproduced with +proj=lcc +a=1 +lat_2=.0000001 - return pj_default_destructor(P, PJD_ERR_CONIC_LAT_EQUAL); + proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->c = cosphi * pow(tan(M_FORTPI + .5 * Q->phi1), Q->n) / Q->n; Q->rho0 = (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. : diff --git a/src/projections/lcca.cpp b/src/projections/lcca.cpp index 53646fc6..6f962699 100644 --- a/src/projections/lcca.cpp +++ b/src/projections/lcca.cpp @@ -112,7 +112,7 @@ static PJ_LP lcca_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse if (fabs(dif) < DEL_TOL) break; } if (!i) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = pj_inv_mlfn(P->ctx, S + Q->M0, P->es, Q->en); @@ -137,15 +137,16 @@ PJ *PROJECTION(lcca) { double s2p0, N0, R0, tan0; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; (Q->en = pj_enfn(P->es)); if (!Q->en) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); if (P->phi0 == 0.) { - return destructor(P, PJD_ERR_LAT_0_IS_ZERO); + proj_log_error(P, _("Invalid value for lat_0: it should be different from 0.")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->l = sin(P->phi0); Q->M0 = pj_mlfn(P->phi0, Q->l, cos(P->phi0), Q->en); diff --git a/src/projections/loxim.cpp b/src/projections/loxim.cpp index 64124bdd..e0b62f1b 100644 --- a/src/projections/loxim.cpp +++ b/src/projections/loxim.cpp @@ -58,14 +58,16 @@ static PJ_LP loxim_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers PJ *PROJECTION(loxim) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->cosphi1 = cos(Q->phi1); if (Q->cosphi1 < EPS) - return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90); - + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->tanphi1 = tan(M_FORTPI + 0.5 * Q->phi1); diff --git a/src/projections/lsat.cpp b/src/projections/lsat.cpp index a811a3a6..ad056da5 100644 --- a/src/projections/lsat.cpp +++ b/src/projections/lsat.cpp @@ -136,7 +136,7 @@ static PJ_LP lsat_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse sppsq = spp * spp; const double denom = 1. - sppsq * (1. + Q->u); if( denom == 0.0 ) { - proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * @@ -160,16 +160,23 @@ PJ *PROJECTION(lsat) { double lam, alf, esc, ess; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; land = pj_param(P->ctx, P->params, "ilsat").i; if (land <= 0 || land > 5) - return pj_default_destructor(P, PJD_ERR_LSAT_NOT_IN_RANGE); + { + proj_log_error(P, _("Invalid value for lsat: lsat should be in [1, 5] range")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } path = pj_param(P->ctx, P->params, "ipath").i; - if (path <= 0 || path > (land <= 3 ? 251 : 233)) - return pj_default_destructor(P, PJD_ERR_PATH_NOT_IN_RANGE); + const int maxPathVal = (land <= 3 ? 251 : 233); + if (path <= 0 || path > maxPathVal) + { + proj_log_error(P, _("Invalid value for path: path should be in [1, %d] range"), maxPathVal); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (land <= 3) { P->lam0 = DEG_TO_RAD * 128.87 - M_TWOPI / 251. * path; diff --git a/src/projections/mbtfpp.cpp b/src/projections/mbtfpp.cpp index cc01cb40..bfa869f9 100644 --- a/src/projections/mbtfpp.cpp +++ b/src/projections/mbtfpp.cpp @@ -32,7 +32,7 @@ static PJ_LP mbtfpp_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver lp.phi = xy.y / FYC; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; @@ -45,7 +45,7 @@ static PJ_LP mbtfpp_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver lp.phi = sin(lp.phi) / CSy; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; diff --git a/src/projections/mbtfpq.cpp b/src/projections/mbtfpq.cpp index 5c7f8ca6..7d44b5ba 100644 --- a/src/projections/mbtfpq.cpp +++ b/src/projections/mbtfpq.cpp @@ -42,7 +42,7 @@ static PJ_LP mbtfpq_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver lp.phi = RYC * xy.y; if (fabs(lp.phi) > 1.) { if (fabs(lp.phi) > ONETOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else if (lp.phi < 0.) { @@ -61,7 +61,7 @@ static PJ_LP mbtfpq_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver lp.phi = RC * (t + sin(lp.phi)); if (fabs(lp.phi) > 1.) if (fabs(lp.phi) > ONETOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; diff --git a/src/projections/merc.cpp b/src/projections/merc.cpp index 3a0ed7b4..7fd3dff9 100644 --- a/src/projections/merc.cpp +++ b/src/projections/merc.cpp @@ -53,7 +53,10 @@ PJ *PROJECTION(merc) { if( (is_phits = pj_param(P->ctx, P->params, "tlat_ts").i) ) { phits = fabs(pj_param(P->ctx, P->params, "rlat_ts").f); if (phits >= M_HALFPI) - return pj_default_destructor(P, PJD_ERR_LAT_TS_LARGER_THAN_90); + { + proj_log_error(P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } if (P->es != 0.0) { /* ellipsoid */ diff --git a/src/projections/misrsom.cpp b/src/projections/misrsom.cpp index d7e199f2..23376789 100644 --- a/src/projections/misrsom.cpp +++ b/src/projections/misrsom.cpp @@ -155,7 +155,7 @@ static PJ_LP misrsom_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inve sppsq = spp * spp; const double denom = 1. - sppsq * (1. + Q->u); if( denom == 0.0 ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * @@ -180,12 +180,15 @@ PJ *PROJECTION(misrsom) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; path = pj_param(P->ctx, P->params, "ipath").i; if (path <= 0 || path > 233) - return pj_default_destructor(P, PJD_ERR_PATH_NOT_IN_RANGE); + { + proj_log_error(P, _("Invalid value for path: path should be in [1, 233] range")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } P->lam0 = DEG_TO_RAD * 129.3056 - M_TWOPI / 233. * path; alf = 98.30382 * DEG_TO_RAD; diff --git a/src/projections/mod_ster.cpp b/src/projections/mod_ster.cpp index 0c30b7b6..237ff75a 100644 --- a/src/projections/mod_ster.cpp +++ b/src/projections/mod_ster.cpp @@ -37,7 +37,7 @@ static PJ_XY mod_ster_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, for cchi = cos(chi); const double denom = 1. + Q->schio * schi + Q->cchio * cchi * coslon; if( denom == 0 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } s = 2. / denom; @@ -136,7 +136,7 @@ PJ *PROJECTION(mil_os) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->n = 2; @@ -159,7 +159,7 @@ PJ *PROJECTION(lee_os) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->n = 2; @@ -184,7 +184,7 @@ PJ *PROJECTION(gs48) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->n = 4; @@ -219,7 +219,7 @@ PJ *PROJECTION(alsk) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->n = 5; @@ -267,7 +267,7 @@ PJ *PROJECTION(gs50) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->n = 9; diff --git a/src/projections/moll.cpp b/src/projections/moll.cpp index 4864c8e1..523de210 100644 --- a/src/projections/moll.cpp +++ b/src/projections/moll.cpp @@ -79,7 +79,7 @@ static PJ * setup(PJ *P, double p) { PJ *PROJECTION(moll) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; return setup(P, M_HALFPI); @@ -89,7 +89,7 @@ PJ *PROJECTION(moll) { PJ *PROJECTION(wag4) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; return setup(P, M_PI/3.); @@ -98,7 +98,7 @@ PJ *PROJECTION(wag4) { PJ *PROJECTION(wag5) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->es = 0; diff --git a/src/projections/natearth.cpp b/src/projections/natearth.cpp index e1f71089..f83c8467 100644 --- a/src/projections/natearth.cpp +++ b/src/projections/natearth.cpp @@ -82,7 +82,7 @@ static PJ_LP natearth_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inv } } if( i == 0 ) - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); lp.phi = yc; /* longitude */ diff --git a/src/projections/natearth2.cpp b/src/projections/natearth2.cpp index e4516a0a..8bef168d 100644 --- a/src/projections/natearth2.cpp +++ b/src/projections/natearth2.cpp @@ -76,7 +76,7 @@ static PJ_LP natearth2_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, in } } if( i == 0 ) - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); lp.phi = yc; /* longitude */ diff --git a/src/projections/nsper.cpp b/src/projections/nsper.cpp index 951111ac..5f76d9b0 100644 --- a/src/projections/nsper.cpp +++ b/src/projections/nsper.cpp @@ -66,7 +66,7 @@ static PJ_XY nsper_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar break; } if (xy.y < Q->rp) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = Q->pn1 / (Q->p - xy.y); @@ -120,7 +120,7 @@ static PJ_LP nsper_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers double cosz, sinz; sinz = 1. - rh * rh * Q->pfact; if (sinz < 0.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } sinz = (Q->p - sqrt(sinz)) / (Q->pn1 / rh + rh / Q->pn1); @@ -166,7 +166,10 @@ static PJ *setup(PJ *P) { } Q->pn1 = Q->height / P->a; /* normalize by radius */ if ( Q->pn1 <= 0 || Q->pn1 > 1e10 ) - return pj_default_destructor (P, PJD_ERR_INVALID_H); + { + proj_log_error(P, _("Invalid value for h")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->p = 1. + Q->pn1; Q->rp = 1. / Q->p; Q->h = 1. / Q->pn1; @@ -182,7 +185,7 @@ static PJ *setup(PJ *P) { PJ *PROJECTION(nsper) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->tilt = 0; @@ -196,7 +199,7 @@ PJ *PROJECTION(tpers) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; omega = pj_param(P->ctx, P->params, "rtilt").f; diff --git a/src/projections/ob_tran.cpp b/src/projections/ob_tran.cpp index 86798e0a..abab5835 100644 --- a/src/projections/ob_tran.cpp +++ b/src/projections/ob_tran.cpp @@ -180,26 +180,33 @@ PJ *PROJECTION(ob_tran) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; /* get name of projection to be translated */ if (pj_param(P->ctx, P->params, "so_proj").s == nullptr) - return destructor(P, PJD_ERR_NO_ROTATION_PROJ); + { + proj_log_error(P, _("Missing parameter: o_proj")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } /* Create the target projection object to rotate */ args = ob_tran_target_params (P->params); /* avoid endless recursion */ if (args.argv == nullptr ) { - return destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ); + proj_log_error(P, _("Failed to find projection to be rotated")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } R = proj_create_argv (P->ctx, args.argc, args.argv); free (args.argv); if (nullptr==R) - return destructor (P, PJD_ERR_UNKNOWN_PROJECTION_ID); + { + proj_log_error(P, _("Projection to be rotated is unknown")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->link = R; if (pj_param(P->ctx, P->params, "to_alpha").i) { @@ -210,7 +217,10 @@ PJ *PROJECTION(ob_tran) { alpha = pj_param(P->ctx, P->params, "ro_alpha").f; if (fabs(fabs(phic) - M_HALFPI) <= TOL) - return destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90); + { + proj_log_error(P, _("Invalid value for lat_c: |lat_c| should be < 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic)); phip = aasin(P->ctx,cos(phic) * sin(alpha)); @@ -225,9 +235,27 @@ PJ *PROJECTION(ob_tran) { lam2 = pj_param(P->ctx, P->params, "ro_lon_2").f; phi2 = pj_param(P->ctx, P->params, "ro_lat_2").f; con = fabs(phi1); - if (fabs(phi1 - phi2) <= TOL || con <= TOL || - fabs(con - M_HALFPI) <= TOL || fabs(fabs(phi2) - M_HALFPI) <= TOL) - return destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90); + + if (fabs(phi1) > M_HALFPI - TOL) + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if (fabs(phi2) > M_HALFPI - TOL) + { + proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if (fabs(phi1 - phi2) < TOL) + { + proj_log_error(P, _("Invalid value for lat_1 and lat_2: lat_1 should be different from lat_2")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if (con < TOL) + { + proj_log_error(P, _("Invalid value for lat_1: lat_1 should be different from zero")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) - sin(phi1) * cos(phi2) * cos(lam2), diff --git a/src/projections/ocea.cpp b/src/projections/ocea.cpp index c78e1ebc..febebcc0 100644 --- a/src/projections/ocea.cpp +++ b/src/projections/ocea.cpp @@ -54,7 +54,7 @@ PJ *PROJECTION(ocea) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->rok = 1. / P->k0; diff --git a/src/projections/oea.cpp b/src/projections/oea.cpp index 46c00d16..2d16d529 100644 --- a/src/projections/oea.cpp +++ b/src/projections/oea.cpp @@ -60,27 +60,34 @@ static PJ_LP oea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse PJ *PROJECTION(oea) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; - if (((Q->n = pj_param(P->ctx, P->params, "dn").f) <= 0.) || - ((Q->m = pj_param(P->ctx, P->params, "dm").f) <= 0.)) { - return pj_default_destructor(P, PJD_ERR_INVALID_M_OR_N); - } else { - Q->theta = pj_param(P->ctx, P->params, "rtheta").f; - Q->sp0 = sin(P->phi0); - Q->cp0 = cos(P->phi0); - Q->rn = 1./ Q->n; - Q->rm = 1./ Q->m; - Q->two_r_n = 2. * Q->rn; - Q->two_r_m = 2. * Q->rm; - Q->hm = 0.5 * Q->m; - Q->hn = 0.5 * Q->n; - P->fwd = oea_s_forward; - P->inv = oea_s_inverse; - P->es = 0.; + if (((Q->n = pj_param(P->ctx, P->params, "dn").f) <= 0.) ) + { + proj_log_error(P, _("Invalid value for n: it should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } + if (((Q->m = pj_param(P->ctx, P->params, "dm").f) <= 0.) ) + { + proj_log_error(P, _("Invalid value for m: it should be > 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + + Q->theta = pj_param(P->ctx, P->params, "rtheta").f; + Q->sp0 = sin(P->phi0); + Q->cp0 = cos(P->phi0); + Q->rn = 1./ Q->n; + Q->rm = 1./ Q->m; + Q->two_r_n = 2. * Q->rn; + Q->two_r_m = 2. * Q->rm; + Q->hm = 0.5 * Q->m; + Q->hn = 0.5 * Q->n; + P->fwd = oea_s_forward; + P->inv = oea_s_inverse; + P->es = 0.; + return P; } diff --git a/src/projections/omerc.cpp b/src/projections/omerc.cpp index 90067cc3..88d63809 100644 --- a/src/projections/omerc.cpp +++ b/src/projections/omerc.cpp @@ -58,7 +58,7 @@ static PJ_XY omerc_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forwar const double V = sin(Q->B * lp.lam); const double U = (S * Q->singam - V * Q->cosgam) / T; if (fabs(fabs(U) - 1.0) < EPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } v = 0.5 * Q->ArB * log((1. - U)/(1. + U)); @@ -98,7 +98,7 @@ static PJ_LP omerc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers } Qp = exp(- Q->BrA * v); if( Qp == 0 ) { - proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } Sp = .5 * (Qp - 1. / Qp); @@ -111,7 +111,7 @@ static PJ_LP omerc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers } else { lp.phi = Q->E / sqrt((1. + Up) / (1. - Up)); if ((lp.phi = pj_phi2(P->ctx, pow(lp.phi, 1. / Q->B), P->e)) == HUGE_VAL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.lam = - Q->rB * atan2((Sp * Q->cosgam - @@ -128,7 +128,7 @@ PJ *PROJECTION(omerc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->no_rot = pj_param(P->ctx, P->params, "bno_rot").i; @@ -154,14 +154,36 @@ PJ *PROJECTION(omerc) { phi1 = pj_param(P->ctx, P->params, "rlat_1").f; lam2 = pj_param(P->ctx, P->params, "rlon_2").f; phi2 = pj_param(P->ctx, P->params, "rlat_2").f; - if (fabs(phi1) > M_HALFPI || fabs(phi2) > M_HALFPI) - return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90); - if (fabs(phi1 - phi2) <= TOL || - (con = fabs(phi1)) <= TOL || - fabs(con - M_HALFPI) <= TOL || - fabs(fabs(P->phi0) - M_HALFPI) <= TOL || - fabs(fabs(phi2) - M_HALFPI) <= TOL) - return pj_default_destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90); + con = fabs(phi1); + + if (fabs(phi1) > M_HALFPI - TOL) + { + proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + if (fabs(phi2) > M_HALFPI - TOL) + { + proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + + if (fabs(phi1 - phi2) <= TOL ) + { + proj_log_error(P, _("Invalid value for lat_1/lat_2: lat_1 should be different from lat_2")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + + if (con <= TOL ) + { + proj_log_error(P, _("Invalid value for lat_1: lat_1 should be different from 0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + + if (fabs(fabs(P->phi0) - M_HALFPI) <= TOL) + { + proj_log_error(P, _("Invalid value for lat_01: |lat_0| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } com = sqrt(P->one_es); if (fabs(P->phi0) > EPS) { @@ -193,9 +215,13 @@ PJ *PROJECTION(omerc) { gamma = alpha_c; } else alpha_c = aasin(P->ctx, D*sin(gamma0 = gamma)); - if( fabs(fabs(P->phi0) - M_HALFPI) <= TOL ) { - return pj_default_destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90); + + if (fabs(fabs(P->phi0) - M_HALFPI) <= TOL) + { + proj_log_error(P, _("Invalid value for lat_01: |lat_0| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } + P->lam0 = lamc - aasin(P->ctx, .5 * (F - 1. / F) * tan(gamma0)) / Q->B; } else { @@ -205,7 +231,8 @@ PJ *PROJECTION(omerc) { p = (L - H) / (L + H); if( p == 0 ) { // Not quite, but es is very close to 1... - return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY); + proj_log_error(P, _("Invalid value for eccentricity")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } J = Q->E * Q->E; J = (J - L * H) / (J + L * H); @@ -217,7 +244,8 @@ PJ *PROJECTION(omerc) { J * tan(.5 * Q->B * (lam1 - lam2)) / p) / Q->B); const double denom = F - 1. / F; if( denom == 0 ) { - return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY); + proj_log_error(P, _("Invalid value for eccentricity")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } gamma0 = atan(2. * sin(Q->B * adjlon(lam1 - P->lam0)) / denom); gamma = alpha_c = aasin(P->ctx, D * sin(gamma0)); diff --git a/src/projections/ortho.cpp b/src/projections/ortho.cpp index 4417dac7..206abb69 100644 --- a/src/projections/ortho.cpp +++ b/src/projections/ortho.cpp @@ -29,7 +29,7 @@ struct pj_opaque { #define EPS10 1.e-10 static PJ_XY forward_error(PJ *P, PJ_LP lp, PJ_XY xy) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); proj_log_trace(P, "Coordinate (%.3f, %.3f) is on the unprojected hemisphere", proj_todeg(lp.lam), proj_todeg(lp.phi)); return xy; @@ -88,7 +88,7 @@ static PJ_LP ortho_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers sinc = rh; if (sinc > 1.) { if ((sinc - 1.) > EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary"); return lp; } @@ -176,7 +176,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver const double rh2 = SQ(xy.x) + SQ(xy.y); if (rh2 >= 1. - 1e-15) { if ((rh2 - 1.) > EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary"); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; @@ -200,7 +200,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver // Equation of the ellipse if( SQ(xy.x) + SQ(xy.y * (P->a / P->b)) > 1 + 1e-11 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary"); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; @@ -228,7 +228,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver xy_recentered.x = xy.x; xy_recentered.y = (xy.y - Q->y_shift) / Q->y_scale; if( SQ(xy.x) + SQ(xy_recentered.y) > 1 + 1e-11 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary"); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; @@ -273,7 +273,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver return lp; } } - proj_context_errno_set(P->ctx, PJD_ERR_NON_CONVERGENT); + proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } @@ -281,7 +281,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver PJ *PROJECTION(ortho) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->sinph0 = sin(P->phi0); diff --git a/src/projections/patterson.cpp b/src/projections/patterson.cpp index 32544580..d24ee98d 100644 --- a/src/projections/patterson.cpp +++ b/src/projections/patterson.cpp @@ -100,7 +100,7 @@ static PJ_LP patterson_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, in } } if( i == 0 ) - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); lp.phi = yc; /* longitude */ diff --git a/src/projections/poly.cpp b/src/projections/poly.cpp index 4ea95cc7..99b6772e 100644 --- a/src/projections/poly.cpp +++ b/src/projections/poly.cpp @@ -80,7 +80,7 @@ static PJ_LP poly_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse const double cp = cos(lp.phi); const double s2ph = sp * cp; if (fabs(cp) < ITOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } double mlp = sqrt(1. - P->es * sp * sp); @@ -97,7 +97,7 @@ static PJ_LP poly_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse break; } if (!i) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } const double c = sin(lp.phi); @@ -128,7 +128,7 @@ static PJ_LP poly_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse break; --i; if( i == 0 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } } @@ -156,14 +156,14 @@ static PJ *destructor(PJ *P, int errlev) { PJ *PROJECTION(poly) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; if (P->es != 0.0) { if (!(Q->en = pj_enfn(P->es))) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); P->inv = poly_e_inverse; P->fwd = poly_e_forward; diff --git a/src/projections/putp3.cpp b/src/projections/putp3.cpp index 09763851..3554909e 100644 --- a/src/projections/putp3.cpp +++ b/src/projections/putp3.cpp @@ -40,7 +40,7 @@ static PJ_LP putp3_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers PJ *PROJECTION(putp3) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->A = 4. * RPISQ; @@ -55,7 +55,7 @@ PJ *PROJECTION(putp3) { PJ *PROJECTION(putp3p) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->A = 2. * RPISQ; diff --git a/src/projections/putp4p.cpp b/src/projections/putp4p.cpp index 8df18972..1c9a763e 100644 --- a/src/projections/putp4p.cpp +++ b/src/projections/putp4p.cpp @@ -47,7 +47,7 @@ static PJ_LP putp4p_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver PJ *PROJECTION(putp4p) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 0.874038744; @@ -64,7 +64,7 @@ PJ *PROJECTION(putp4p) { PJ *PROJECTION(weren) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 1.; diff --git a/src/projections/putp5.cpp b/src/projections/putp5.cpp index 5e70382d..a6aed94e 100644 --- a/src/projections/putp5.cpp +++ b/src/projections/putp5.cpp @@ -45,7 +45,7 @@ static PJ_LP putp5_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers PJ *PROJECTION(putp5) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->A = 2.; @@ -62,7 +62,7 @@ PJ *PROJECTION(putp5) { PJ *PROJECTION(putp5p) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->A = 1.5; diff --git a/src/projections/putp6.cpp b/src/projections/putp6.cpp index da8c0a7c..63253fbd 100644 --- a/src/projections/putp6.cpp +++ b/src/projections/putp6.cpp @@ -61,7 +61,7 @@ static PJ_LP putp6_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers PJ *PROJECTION(putp6) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 1.01346; @@ -81,7 +81,7 @@ PJ *PROJECTION(putp6) { PJ *PROJECTION(putp6p) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->C_x = 0.44329; diff --git a/src/projections/qsc.cpp b/src/projections/qsc.cpp index dd9ce965..920e93b0 100644 --- a/src/projections/qsc.cpp +++ b/src/projections/qsc.cpp @@ -379,7 +379,7 @@ static PJ_LP qsc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse PJ *PROJECTION(qsc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->inv = qsc_e_inverse; diff --git a/src/projections/robin.cpp b/src/projections/robin.cpp index 6a1405b6..4dfc306c 100644 --- a/src/projections/robin.cpp +++ b/src/projections/robin.cpp @@ -86,7 +86,7 @@ static PJ_XY robin_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar dphi = fabs(lp.phi); i = isnan(lp.phi) ? -1 : lround(floor(dphi * C1 + 1e-15)); if( i < 0 ){ - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } if (i >= NODES) i = NODES; @@ -109,7 +109,7 @@ static PJ_LP robin_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers lp.phi = fabs(xy.y / FYC); if (lp.phi >= 1.) { /* simple pathologic cases */ if (lp.phi > ONEEPS) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { @@ -120,7 +120,7 @@ static PJ_LP robin_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers /* in Y space, reduce to table interval */ long i = isnan(lp.phi) ? -1 : lround(floor(lp.phi * NODES)); if( i < 0 || i >= NODES ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } for (;;) { @@ -138,12 +138,12 @@ static PJ_LP robin_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers break; } if( iters == 0 ) - proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); lp.phi = (5 * i + t) * DEG_TO_RAD; if (xy.y < 0.) lp.phi = -lp.phi; lp.lam /= V(X[i], t); if( fabs(lp.lam) > M_PI ) { - proj_errno_set(P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp = proj_coord_error().lp; } } diff --git a/src/projections/rouss.cpp b/src/projections/rouss.cpp index 2eb13b3d..195b90b3 100644 --- a/src/projections/rouss.cpp +++ b/src/projections/rouss.cpp @@ -95,7 +95,7 @@ static PJ *destructor (PJ *P, int errlev) { if (static_cast<struct pj_opaque*>(P->opaque)->en) free (static_cast<struct pj_opaque*>(P->opaque)->en); - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); } @@ -104,11 +104,11 @@ PJ *PROJECTION(rouss) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if (!((Q->en = proj_mdist_ini(P->es)))) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); es2 = sin(P->phi0); Q->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), Q->en); diff --git a/src/projections/rpoly.cpp b/src/projections/rpoly.cpp index e3f09c59..0c55954d 100644 --- a/src/projections/rpoly.cpp +++ b/src/projections/rpoly.cpp @@ -46,7 +46,7 @@ static PJ_XY rpoly_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar PJ *PROJECTION(rpoly) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->phi1 = fabs(pj_param(P->ctx, P->params, "rlat_ts").f); diff --git a/src/projections/sch.cpp b/src/projections/sch.cpp index 359e8efc..d10ccf6c 100644 --- a/src/projections/sch.cpp +++ b/src/projections/sch.cpp @@ -131,7 +131,7 @@ static PJ *setup(PJ *P) { /* general initialization */ // Pass a dummy ellipsoid definition that will be overridden just afterwards Q->cart = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart == nullptr) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def (P, Q->cart); @@ -154,7 +154,7 @@ static PJ *setup(PJ *P) { /* general initialization */ /* Set up local sphere at the given peg point */ Q->cart_sph = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart_sph == nullptr) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); pj_calc_ellipsoid_params(Q->cart_sph, Q->rcurv, 0); /* Set up the transformation matrices */ @@ -186,7 +186,7 @@ static PJ *setup(PJ *P) { /* general initialization */ PJ *PROJECTION(sch) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; @@ -196,21 +196,24 @@ PJ *PROJECTION(sch) { if (pj_param(P->ctx, P->params, "tplat_0").i) Q->plat = pj_param(P->ctx, P->params, "rplat_0").f; else { - return pj_default_destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ); + proj_log_error(P, _("Missing parameter plat_0.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* Check if peg longitude was defined */ if (pj_param(P->ctx, P->params, "tplon_0").i) Q->plon = pj_param(P->ctx, P->params, "rplon_0").f; else { - return pj_default_destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ); + proj_log_error(P, _("Missing parameter plon_0.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* Check if peg heading is defined */ if (pj_param(P->ctx, P->params, "tphdg_0").i) Q->phdg = pj_param(P->ctx, P->params, "rphdg_0").f; else { - return pj_default_destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ); + proj_log_error(P, _("Missing parameter phdg_0.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } diff --git a/src/projections/sconics.cpp b/src/projections/sconics.cpp index c12b05a2..9084404c 100644 --- a/src/projections/sconics.cpp +++ b/src/projections/sconics.cpp @@ -48,15 +48,28 @@ static int phi12(PJ *P, double *del) { double p1, p2; int err = 0; - if (!pj_param(P->ctx, P->params, "tlat_1").i || - !pj_param(P->ctx, P->params, "tlat_2").i) { - err = -41; - } else { + if (!pj_param(P->ctx, P->params, "tlat_1").i ) + { + proj_log_error(P, _("Missing parameter: lat_1 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else if ( !pj_param(P->ctx, P->params, "tlat_2").i) + { + proj_log_error(P, _("Missing parameter: lat_2 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else + { p1 = pj_param(P->ctx, P->params, "rlat_1").f; p2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (p2 - p1); - static_cast<struct pj_opaque*>(P->opaque)->sig = 0.5 * (p2 + p1); - err = (fabs(*del) < EPS || fabs(static_cast<struct pj_opaque*>(P->opaque)->sig) < EPS) ? PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 : 0; + const double sig = 0.5 * (p2 + p1); + static_cast<struct pj_opaque*>(P->opaque)->sig = sig; + err = (fabs(*del) < EPS || fabs(sig) < EPS) ? PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE : 0; + if( err ) + { + proj_log_error(P, _("Illegal value for lat_1 and lat_2: |lat_1 - lat_2| and |lat_1 + lat_2| should be > 0")); + } } return err; } @@ -119,7 +132,7 @@ static PJ *setup(PJ *P, enum Type type) { int err; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->type = type; @@ -167,8 +180,10 @@ static PJ *setup(PJ *P, enum Type type) { Q->c1 = 1./tan (Q->sig); del = P->phi0 - Q->sig; if (fabs (del) - EPS10 >= M_HALFPI) - return pj_default_destructor(P, PJD_ERR_LAT_0_HALF_PI_FROM_MEAN); - + { + proj_log_error(P, _("Invalid value for lat_0/lat_1/lat_2: |lat_0 - 0.5 * (lat_1 + lat_2)| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->rho_0 = Q->c2 * (Q->c1 - tan (del)); break; diff --git a/src/projections/somerc.cpp b/src/projections/somerc.cpp index a184500c..af8c0b17 100644 --- a/src/projections/somerc.cpp +++ b/src/projections/somerc.cpp @@ -62,7 +62,7 @@ static PJ_LP somerc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver lp.phi = phip; lp.lam = lamp / Q->c; } else { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return (lp); @@ -73,7 +73,7 @@ PJ *PROJECTION(somerc) { double cp, phip0, sp; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; diff --git a/src/projections/stere.cpp b/src/projections/stere.cpp index ad1caae2..4646db3d 100644 --- a/src/projections/stere.cpp +++ b/src/projections/stere.cpp @@ -60,7 +60,7 @@ static PJ_XY stere_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forwar const double denom = Q->cosX1 * (1. + Q->sinX1 * sinX + Q->cosX1 * cosX * coslam); if( denom == 0 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } A = Q->akm1 / denom; @@ -117,7 +117,7 @@ static PJ_XY stere_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; oblcon: if (xy.y <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = Q->akm1 / xy.y; @@ -131,7 +131,7 @@ oblcon: /*-fallthrough*/ case S_POLE: if (fabs (lp.phi - M_HALFPI) < TOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = Q->akm1 * tan (M_FORTPI + .5 * lp.phi); @@ -190,7 +190,7 @@ static PJ_LP stere_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers phi_l = lp.phi; } - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } @@ -304,7 +304,7 @@ static PJ *setup(PJ *P) { /* general initialization */ PJ *PROJECTION(stere) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->phits = pj_param (P->ctx, P->params, "tlat_ts").i ? @@ -317,13 +317,14 @@ PJ *PROJECTION(stere) { PJ *PROJECTION(ups) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; /* International Ellipsoid */ P->phi0 = pj_param(P->ctx, P->params, "bsouth").i ? - M_HALFPI: M_HALFPI; if (P->es == 0.0) { - return pj_default_destructor (P, PJD_ERR_ELLIPSOID_USE_REQUIRED); + proj_log_error(P, _("Invalid value for es: only ellipsoidal formulation supported")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } P->k0 = .994; P->x0 = 2000000.; diff --git a/src/projections/sterea.cpp b/src/projections/sterea.cpp index 4dd22d2f..28fdea2e 100644 --- a/src/projections/sterea.cpp +++ b/src/projections/sterea.cpp @@ -55,7 +55,7 @@ static PJ_XY sterea_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forwa cosl = cos(lp.lam); const double denom = 1. + Q->sinc0 * sinc + Q->cosc0 * cosc * cosl; if( denom == 0.0 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } k = P->k0 * Q->R2 / denom; @@ -103,12 +103,12 @@ PJ *PROJECTION(sterea) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->en = pj_gauss_ini(P->e, P->phi0, &(Q->phic0), &R); if (nullptr==Q->en) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->sinc0 = sin (Q->phic0); Q->cosc0 = cos (Q->phic0); diff --git a/src/projections/sts.cpp b/src/projections/sts.cpp index 75190e85..cdd59044 100644 --- a/src/projections/sts.cpp +++ b/src/projections/sts.cpp @@ -72,7 +72,7 @@ static PJ *setup(PJ *P, double p, double q, int mode) { PJ *PROJECTION(fouc) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; return setup(P, 2., 2., 1); } @@ -82,7 +82,7 @@ PJ *PROJECTION(fouc) { PJ *PROJECTION(kav5) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; return setup(P, 1.50488, 1.35439, 0); @@ -93,7 +93,7 @@ PJ *PROJECTION(kav5) { PJ *PROJECTION(qua_aut) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; return setup(P, 2., 2., 0); } @@ -103,7 +103,7 @@ PJ *PROJECTION(qua_aut) { PJ *PROJECTION(mbt_s) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; return setup(P, 1.48875, 1.36509, 0); } diff --git a/src/projections/tcc.cpp b/src/projections/tcc.cpp index 9413b567..c53bed05 100644 --- a/src/projections/tcc.cpp +++ b/src/projections/tcc.cpp @@ -16,7 +16,7 @@ static PJ_XY tcc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward const double b = cos (lp.phi) * sin (lp.lam); const double bt = 1. - b * b; if (bt < EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = b / sqrt(bt); diff --git a/src/projections/tmerc.cpp b/src/projections/tmerc.cpp index 8f897061..3093e745 100644 --- a/src/projections/tmerc.cpp +++ b/src/projections/tmerc.cpp @@ -89,7 +89,7 @@ static PJ_XY approx_e_fwd (PJ_LP lp, PJ *P) if( lp.lam < -M_HALFPI || lp.lam > M_HALFPI ) { xy.x = HUGE_VAL; xy.y = HUGE_VAL; - proj_context_errno_set( P->ctx, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT ); + proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN ); return xy; } @@ -123,7 +123,7 @@ static PJ_XY tmerc_spherical_fwd (PJ_LP lp, PJ *P) { cosphi = cos(lp.phi); b = cosphi * sin (lp.lam); if (fabs (fabs (b) - 1.) <= EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } @@ -138,7 +138,7 @@ static PJ_XY tmerc_spherical_fwd (PJ_LP lp, PJ *P) { } else if (b >= 1.) { if ((b - 1.) > EPS10) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else xy.y = 0.; @@ -190,7 +190,7 @@ static PJ_LP tmerc_spherical_inv (PJ_XY xy, PJ *P) { h = exp(xy.x / Q->esp); if( h == 0 ) { - proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } g = .5 * (h - 1. / h); @@ -224,7 +224,7 @@ static PJ *setup_approx(PJ *P) { if (P->es != 0.0) { if (!(Q->en = pj_enfn(P->es))) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); Q->esp = P->es / (1. - P->es); @@ -587,7 +587,7 @@ static PJ *setup(PJ *P, TMercAlgo eAlg) { struct tmerc_data *Q = static_cast<struct tmerc_data*>(calloc (1, sizeof (struct tmerc_data))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if( P->es == 0 ) @@ -701,14 +701,18 @@ PJ *PROJECTION(tmerc) { TMercAlgo algo; if( !getAlgoFromParams(P, algo) ) - return pj_default_destructor(P, PJD_ERR_INVALID_ARG); + { + proj_log_error(P, _("Invalid value for algo")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } return setup(P, algo); } PJ *PROJECTION(etmerc) { if (P->es == 0.0) { - return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED); + proj_log_error(P, _("Invalid value for eccentricity: it should not be zero")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } return setup (P, TMercAlgo::PODER_ENGSAGER); @@ -720,10 +724,12 @@ PJ *PROJECTION(etmerc) { PJ *PROJECTION(utm) { long zone; if (P->es == 0.0) { - return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED); + proj_log_error(P, _("Invalid value for eccentricity: it should not be zero")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (P->lam0 < -1000.0 || P->lam0 > 1000.0) { - return pj_default_destructor(P, PJD_ERR_INVALID_UTM_ZONE); + proj_log_error(P, _("Invalid value for lon_0")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } P->y0 = pj_param (P->ctx, P->params, "bsouth").i ? 10000000. : 0.; @@ -734,7 +740,8 @@ PJ *PROJECTION(utm) { if (zone > 0 && zone <= 60) --zone; else { - return pj_default_destructor(P, PJD_ERR_INVALID_UTM_ZONE); + proj_log_error(P, _("Invalid value for zone")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else /* nearest central meridian input */ @@ -751,6 +758,9 @@ PJ *PROJECTION(utm) { TMercAlgo algo; if( !getAlgoFromParams(P, algo) ) - return pj_default_destructor(P, PJD_ERR_INVALID_ARG); + { + proj_log_error(P, _("Invalid value for algo")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } return setup(P, algo); } diff --git a/src/projections/tobmerc.cpp b/src/projections/tobmerc.cpp index f05a9b6b..13633a91 100644 --- a/src/projections/tobmerc.cpp +++ b/src/projections/tobmerc.cpp @@ -20,7 +20,7 @@ static PJ_XY tobmerc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forw // it's not even that large, merely 38.025...). Even if the logic was // such that phi was strictly equal to pi/2, allowing xy.y = inf would be // a reasonable result. - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } diff --git a/src/projections/tpeqd.cpp b/src/projections/tpeqd.cpp index 90efb395..d6d8e790 100644 --- a/src/projections/tpeqd.cpp +++ b/src/projections/tpeqd.cpp @@ -66,7 +66,7 @@ PJ *PROJECTION(tpeqd) { double lam_1, lam_2, phi_1, phi_2, A12; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; @@ -77,7 +77,10 @@ PJ *PROJECTION(tpeqd) { lam_2 = pj_param(P->ctx, P->params, "rlon_2").f; if (phi_1 == phi_2 && lam_1 == lam_2) - return pj_default_destructor(P, PJD_ERR_CONTROL_POINT_NO_DIST); + { + proj_log_error(P, _("Invalid value for lat_1/lon_1/lat_2/lon_2: the 2 points should be distinct.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } P->lam0 = adjlon (0.5 * (lam_1 + lam_2)); Q->dlam2 = adjlon (lam_2 - lam_1); @@ -92,7 +95,8 @@ PJ *PROJECTION(tpeqd) { Q->z02 = aacos(P->ctx, Q->sp1 * Q->sp2 + Q->cp1 * Q->cp2 * cos (Q->dlam2)); if( Q->z02 == 0.0 ) { // Actually happens when both lat_1 = lat_2 and |lat_1| = 90 - return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90); + proj_log_error(P, _("Invalid value for lat_1 and lat_2: their absolute value should be < 90°.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->hz0 = .5 * Q->z02; A12 = atan2(Q->cp2 * sin (Q->dlam2), diff --git a/src/projections/urm5.cpp b/src/projections/urm5.cpp index c3021841..25db4391 100644 --- a/src/projections/urm5.cpp +++ b/src/projections/urm5.cpp @@ -32,22 +32,29 @@ PJ *PROJECTION(urm5) { double alpha, t; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; - if (pj_param(P->ctx, P->params, "tn").i) { - Q->n = pj_param(P->ctx, P->params, "dn").f; - if (Q->n <= 0. || Q->n > 1.) - return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE); - } else { - return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE); + if (!pj_param(P->ctx, P->params, "tn").i ) + { + proj_log_error(P, _("Missing parameter n.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } + + Q->n = pj_param(P->ctx, P->params, "dn").f; + if (Q->n <= 0. || Q->n > 1.) + { + proj_log_error(P, _("Invalid value for n: it should be in ]0,1] range.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + Q->q3 = pj_param(P->ctx, P->params, "dq").f / 3.; alpha = pj_param(P->ctx, P->params, "ralpha").f; t = Q->n * sin (alpha); const double denom = sqrt (1. - t * t); if( denom == 0 ) { - return pj_default_destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90); + proj_log_error(P, _("Invalid value for n / alpha: n * sin(|alpha|) should be < 1.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->m = cos (alpha) / denom; Q->rmn = 1. / (Q->m * Q->n); diff --git a/src/projections/urmfps.cpp b/src/projections/urmfps.cpp index 5d689f9f..36c2b7d1 100644 --- a/src/projections/urmfps.cpp +++ b/src/projections/urmfps.cpp @@ -49,16 +49,21 @@ static PJ *setup(PJ *P) { PJ *PROJECTION(urmfps) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; - if (pj_param(P->ctx, P->params, "tn").i) { - static_cast<struct pj_opaque*>(P->opaque)->n = pj_param(P->ctx, P->params, "dn").f; - if (static_cast<struct pj_opaque*>(P->opaque)->n <= 0. || static_cast<struct pj_opaque*>(P->opaque)->n > 1.) - return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE); - } else { - return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE); + if (!pj_param(P->ctx, P->params, "tn").i ) + { + proj_log_error(P, _("Missing parameter n.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } + + Q->n = pj_param(P->ctx, P->params, "dn").f; + if (Q->n <= 0. || Q->n > 1.) + { + proj_log_error(P, _("Invalid value for n: it should be in ]0,1] range.")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } return setup(P); @@ -68,7 +73,7 @@ PJ *PROJECTION(urmfps) { PJ *PROJECTION(wag1) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; static_cast<struct pj_opaque*>(P->opaque)->n = 0.8660254037844386467637231707; diff --git a/src/projections/vandg.cpp b/src/projections/vandg.cpp index 107fc3b9..603aa35c 100644 --- a/src/projections/vandg.cpp +++ b/src/projections/vandg.cpp @@ -19,7 +19,7 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar // Comments tie this formulation to Snyder (1987), p. 241. p2 = fabs(lp.phi / M_HALFPI); // sin(theta) from (29-6) if ((p2 - TOL) > 1.) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } if (p2 > 1.) @@ -56,7 +56,7 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar // y from (29-2) has been expressed in terms of x here xy.y = 1. - xy.y * (xy.y + 2. * al); if (xy.y < -TOL) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } if (xy.y < 0.) @@ -95,7 +95,7 @@ static PJ_LP vandg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; // d (29-14) const double al_mul_m = al * m; // a1*m1 if( fabs(al_mul_m) < 1e-16 ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } d = 3. * d /al_mul_m; // cos(3*theta1) (29-17) @@ -109,7 +109,7 @@ static PJ_LP vandg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers lp.lam = fabs(xy.x) <= TOL ? 0. : .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x; } else { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } diff --git a/src/projections/vandg2.cpp b/src/projections/vandg2.cpp index cd7e7b6c..d3067952 100644 --- a/src/projections/vandg2.cpp +++ b/src/projections/vandg2.cpp @@ -55,7 +55,7 @@ static PJ_XY vandg2_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa PJ *PROJECTION(vandg2) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->vdg3 = 0; @@ -67,7 +67,7 @@ PJ *PROJECTION(vandg2) { PJ *PROJECTION(vandg3) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->vdg3 = 1; diff --git a/src/projections/wag3.cpp b/src/projections/wag3.cpp index ed3250ef..c7308c51 100644 --- a/src/projections/wag3.cpp +++ b/src/projections/wag3.cpp @@ -37,7 +37,7 @@ PJ *PROJECTION(wag3) { double ts; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; diff --git a/src/projections/wink1.cpp b/src/projections/wink1.cpp index f4ffafe3..0e68c1ab 100644 --- a/src/projections/wink1.cpp +++ b/src/projections/wink1.cpp @@ -35,7 +35,7 @@ static PJ_LP wink1_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers PJ *PROJECTION(wink1) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; static_cast<struct pj_opaque*>(P->opaque)->cosphi1 = cos (pj_param(P->ctx, P->params, "rlat_ts").f); diff --git a/src/projections/wink2.cpp b/src/projections/wink2.cpp index b5b1e812..d3ba49d5 100644 --- a/src/projections/wink2.cpp +++ b/src/projections/wink2.cpp @@ -55,7 +55,7 @@ static PJ_LP wink2_s_inverse(PJ_XY xy, PJ *P) PJ *PROJECTION(wink2) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; static_cast<struct pj_opaque*>(P->opaque)->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f); diff --git a/src/strerrno.cpp b/src/strerrno.cpp index 3d0131c6..f94de55d 100644 --- a/src/strerrno.cpp +++ b/src/strerrno.cpp @@ -8,103 +8,68 @@ #include "proj_config.h" #include "proj_internal.h" -static const char * const -pj_err_list[] = { - "no arguments in initialization list", /* -1 */ - "no options found in 'init' file", /* -2 */ - "no colon in init= string", /* -3 */ - "projection not named", /* -4 */ - "unknown projection id", /* -5 */ - "effective eccentricity < 0 or >= 1.", /* -6 */ - "unknown unit conversion id", /* -7 */ - "invalid boolean param argument", /* -8 */ - "unknown elliptical parameter name", /* -9 */ - "reciprocal flattening (1/f) = 0", /* -10 */ - "|radius reference latitude| > 90", /* -11 */ - "squared eccentricity < 0", /* -12 */ - "major axis or radius = 0 or not given", /* -13 */ - "latitude or longitude exceeded limits", /* -14 */ - "invalid x or y", /* -15 */ - "improperly formed DMS value", /* -16 */ - "non-convergent inverse meridional dist", /* -17 */ - "non-convergent sinh(psi) to tan(phi)", /* -18 */ - "acos/asin: |arg| >1.+1e-14", /* -19 */ - "tolerance condition error", /* -20 */ - "conic lat_1 = -lat_2", /* -21 */ - "lat_0, lat_1 or lat_2 >= 90", /* -22 */ - "lat_1 = 0", /* -23 */ - "lat_ts >= 90", /* -24 */ - "no distance between control points", /* -25 */ - "projection not selected to be rotated", /* -26 */ - "W <= 0 or M <= 0", /* -27 */ - "lsat not in 1-5 range", /* -28 */ - "path not in range", /* -29 */ - "h <= 0 or h > 1e10 * a", /* -30 */ - "k <= 0", /* -31 */ - "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -32 */ - "lat_0 = 0 or 90 or alpha = 90", /* -33 */ - "elliptical usage required", /* -34 */ - "invalid UTM zone number", /* -35 */ - "", /* no longer used */ /* -36 */ - "failed to find projection to be rotated", /* -37 */ - "failed to load datum shift file", /* -38 */ - "both n & m must be spec'd and > 0", /* -39 */ - "n <= 0, n > 1 or not specified", /* -40 */ - "lat_1 or lat_2 not specified", /* -41 */ - "|lat_1| == |lat_2|", /* -42 */ - "lat_0 is pi/2 from mean lat", /* -43 */ - "unparseable coordinate system definition", /* -44 */ - "geocentric transformation missing z or ellps", /* -45 */ - "unknown prime meridian conversion id", /* -46 */ - "illegal axis orientation combination", /* -47 */ - "point not within available datum shift grids", /* -48 */ - "invalid sweep axis, choose x or y", /* -49 */ - "malformed pipeline", /* -50 */ - "unit conversion factor must be > 0", /* -51 */ - "invalid scale", /* -52 */ - "non-convergent computation", /* -53 */ - "missing required arguments", /* -54 */ - "lat_0 = 0", /* -55 */ - "ellipsoidal usage unsupported", /* -56 */ - "only one +init allowed for non-pipeline operations", /* -57 */ - "argument not numerical or out of range", /* -58 */ - "inconsistent unit type between input and output", /* -59 */ - "arguments are mutually exclusive", /* -60 */ - "generic error of unknown origin", /* -61 */ - "network error", /* -62 */ - /* When adding error messages, remember to update ID defines in - src/proj_internal.h and src/apps/gie.cpp */ -}; +const char* proj_errno_string(int err) { + return proj_context_errno_string(pj_get_default_ctx(), err); +} +static const struct +{ + int num; + const char *str; +} error_strings[] = { -const char* proj_errno_string(int err) { - const int max_error = 9999; - static char note[50]; - size_t adjusted_err; + { PROJ_ERR_INVALID_OP_WRONG_SYNTAX, _("Invalid PROJ string syntax") }, + { PROJ_ERR_INVALID_OP_MISSING_ARG, _("Missing argument") }, + { PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE, _("Invalid value for an argument") }, + { PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS, _("Mutually exclusive arguments") }, + { PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID, _("File not found or invalid") }, + { PROJ_ERR_COORD_TRANSFM_INVALID_COORD, _("Invalid coordinate") }, + { PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN, _("Point outside of projection domain") }, + { PROJ_ERR_COORD_TRANSFM_NO_OPERATION, _("No operation matching criteria found for coordinate") }, + { PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID, _("Coordinate to transform falls outside grid") }, + { PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA, _("Coordinate to transform falls into a grid cell that evaluates to nodata") }, + { PROJ_ERR_OTHER_API_MISUSE, _("API misuse") }, + { PROJ_ERR_OTHER_NO_INVERSE_OP, _("No inverse operation") }, + { PROJ_ERR_OTHER_NETWORK_ERROR, _("Network error when accessing a remote resource") }, +}; + +const char PROJ_DLL * proj_context_errno_string(PJ_CONTEXT* ctx, int err) +{ + if( ctx == nullptr ) + ctx = pj_get_default_ctx(); if (0==err) return nullptr; - /* System error codes are positive */ - if (err > 0) { -#ifdef HAVE_STRERROR - return strerror(err); -#else - /* Defend string boundary against exorbitantly large err values */ - /* which may occur on platforms with 64-bit ints */ - sprintf(note, "no system list, errno: %d\n", - (err < max_error) ? err: max_error); - return note; -#endif + const char* str = nullptr; + for( const auto& num_str_pair: error_strings ) + { + if( err == num_str_pair.num ) + { + str = num_str_pair.str; + break; + } } - /* PROJ error codes are negative: -1 to -9999 */ - adjusted_err = err < -max_error ? max_error : -err - 1; - if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *))) - return (char *)pj_err_list[adjusted_err]; + if( str == nullptr && err > 0 && (err & PROJ_ERR_INVALID_OP) != 0 ) + { + str = _("Unspecified error related to coordinate operation initialization"); + } + if( str == nullptr && err > 0 && (err & PROJ_ERR_COORD_TRANSFM) != 0 ) + { + str = _("Unspecified error related to coordinate transformation"); + } - sprintf(note, "invalid projection system error (%d)", - (err > -max_error) ? err: -max_error); - return note; + if (str) { + ctx->lastFullErrorMessage = str; + } + else + { + ctx->lastFullErrorMessage.resize(50); + snprintf(&ctx->lastFullErrorMessage[0], ctx->lastFullErrorMessage.size(), + _("Unknown error (code %d)"), err); + ctx->lastFullErrorMessage.resize(strlen(ctx->lastFullErrorMessage.data())); + } + return ctx->lastFullErrorMessage.c_str(); } diff --git a/src/transformations/affine.cpp b/src/transformations/affine.cpp index 43fd8642..8b927688 100644 --- a/src/transformations/affine.cpp +++ b/src/transformations/affine.cpp @@ -176,7 +176,7 @@ static void computeReverseParameters(PJ* P) PJ *TRANSFORMATION(affine,0 /* no need for ellipsoid */) { struct pj_opaque_affine *Q = initQ(); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = (void *) Q; P->fwd4d = forward_4d; @@ -227,7 +227,7 @@ PJ *TRANSFORMATION(affine,0 /* no need for ellipsoid */) { PJ *TRANSFORMATION(geogoffset,0 /* no need for ellipsoid */) { struct pj_opaque_affine *Q = initQ(); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = (void *) Q; P->fwd4d = forward_4d; diff --git a/src/transformations/defmodel.cpp b/src/transformations/defmodel.cpp index 3d0f2a58..89e0429f 100644 --- a/src/transformations/defmodel.cpp +++ b/src/transformations/defmodel.cpp @@ -390,7 +390,7 @@ PJ *TRANSFORMATION(defmodel, 1) { // Pass a dummy ellipsoid definition that will be overridden just afterwards auto cart = proj_create(P->ctx, "+proj=cart +a=1"); if (cart == nullptr) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def(P, cart); @@ -402,14 +402,14 @@ PJ *TRANSFORMATION(defmodel, 1) { const char *model = pj_param(P->ctx, P->params, "smodel").s; if (!model) { - proj_log_error(P, "defmodel: +model= should be specified."); - return destructor(P, PJD_ERR_NO_ARGS); + proj_log_error(P, _("defmodel: +model= should be specified.")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } auto file = NS_PROJ::FileManager::open_resource_file(P->ctx, model); if (nullptr == file) { - proj_log_error(P, "defmodel: Cannot open %s", model); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("defmodel: Cannot open %s"), model); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0, SEEK_END); unsigned long long size = file->tell(); @@ -417,23 +417,23 @@ PJ *TRANSFORMATION(defmodel, 1) { // that could be a denial of service risk. 10 MB should be sufficiently // large for any valid use ! if (size > 10 * 1024 * 1024) { - proj_log_error(P, "defmodel: File %s too large", model); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("defmodel: File %s too large"), model); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0); std::string jsonStr; jsonStr.resize(static_cast<size_t>(size)); if (file->read(&jsonStr[0], jsonStr.size()) != jsonStr.size()) { - proj_log_error(P, "defmodel: Cannot read %s", model); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("defmodel: Cannot read %s"), model); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } try { Q->evaluator.reset(new Evaluator<Grid, GridSet, EvaluatorIface>( MasterFile::parse(jsonStr), Q->evaluatorIface, P->a, P->b)); } catch (const std::exception &e) { - proj_log_error(P, "defmodel: invalid model: %s", e.what()); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("defmodel: invalid model: %s"), e.what()); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } P->fwd4d = forward_4d; diff --git a/src/transformations/deformation.cpp b/src/transformations/deformation.cpp index 8ce02bee..307de85f 100644 --- a/src/transformations/deformation.cpp +++ b/src/transformations/deformation.cpp @@ -179,7 +179,7 @@ static PJ_XYZ get_grid_shift(PJ* P, const PJ_XYZ& cartesian) { shift.lp = pj_hgrid_value(P, Q->hgrids, geodetic.lp); shift.enu.u = pj_vgrid_value(P, Q->vgrids, geodetic.lp, 1.0); - if (proj_errno(P) == PJD_ERR_GRID_AREA) + if (proj_errno(P) == PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID) proj_log_debug(P, "deformation: coordinate (%.3f, %.3f) outside deformation model", proj_todeg(geodetic.lpz.lam), proj_todeg(geodetic.lpz.phi)); @@ -358,7 +358,7 @@ PJ *TRANSFORMATION(deformation,1) { // Pass a dummy ellipsoid definition that will be overridden just afterwards Q->cart = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart == nullptr) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def (P, Q->cart); @@ -369,8 +369,8 @@ PJ *TRANSFORMATION(deformation,1) { /* Build gridlists. Both horizontal and vertical grids are mandatory. */ if ( !has_grids && (!has_xy_grids || !has_z_grids)) { - proj_log_error(P, "deformation: Either +grids or (+xy_grids and +z_grids) should be specified."); - return destructor(P, PJD_ERR_NO_ARGS ); + proj_log_error(P, _("deformation: Either +grids or (+xy_grids and +z_grids) should be specified.")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG ); } if( has_grids ) @@ -378,22 +378,22 @@ PJ *TRANSFORMATION(deformation,1) { Q->grids = pj_generic_grid_init(P, "grids"); /* Was gridlist compiled properly? */ if ( proj_errno(P) ) { - proj_log_error(P, "deformation: could not find required grid(s)."); - return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_log_error(P, _("deformation: could not find required grid(s).)")); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } } else { Q->hgrids = pj_hgrid_init(P, "xy_grids"); if (proj_errno(P)) { - proj_log_error(P, "deformation: could not find requested xy_grid(s)."); - return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_log_error(P, _("deformation: could not find requested xy_grid(s).")); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } Q->vgrids = pj_vgrid_init(P, "z_grids"); if (proj_errno(P)) { - proj_log_error(P, "deformation: could not find requested z_grid(s)."); - return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_log_error(P, _("deformation: could not find requested z_grid(s).")); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } } @@ -403,8 +403,8 @@ PJ *TRANSFORMATION(deformation,1) { } if (pj_param_exists(P->params, "t_obs")) { - proj_log_error(P, "deformation: +t_obs parameter is deprecated. Use +dt instead."); - return destructor(P, PJD_ERR_MISSING_ARGS); + proj_log_error(P, _("deformation: +t_obs parameter is deprecated. Use +dt instead.")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->t_epoch = HUGE_VAL; @@ -413,13 +413,13 @@ PJ *TRANSFORMATION(deformation,1) { } if (Q->dt == HUGE_VAL && Q->t_epoch == HUGE_VAL) { - proj_log_error(P, "deformation: either +dt or +t_epoch needs to be set."); - return destructor(P, PJD_ERR_MISSING_ARGS); + proj_log_error(P, _("deformation: either +dt or +t_epoch needs to be set.")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (Q->dt != HUGE_VALL && Q->t_epoch != HUGE_VALL) { - proj_log_error(P, "deformation: +dt or +t_epoch are mutually exclusive."); - return destructor(P, PJD_ERR_MUTUALLY_EXCLUSIVE_ARGS); + proj_log_error(P, _("deformation: +dt or +t_epoch are mutually exclusive.")); + return destructor(P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS); } P->fwd4d = forward_4d; diff --git a/src/transformations/helmert.cpp b/src/transformations/helmert.cpp index 99aa74a4..edb85355 100644 --- a/src/transformations/helmert.cpp +++ b/src/transformations/helmert.cpp @@ -478,7 +478,7 @@ static PJ_COORD helmert_reverse_4d (PJ_COORD point, PJ *P) { static PJ* init_helmert_six_parameters(PJ* P) { struct pj_opaque_helmert *Q = static_cast<struct pj_opaque_helmert*>(calloc (1, sizeof (struct pj_opaque_helmert))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = (void *) Q; /* In most cases, we work on 3D cartesian coordinates */ @@ -522,8 +522,8 @@ static PJ* read_convention(PJ* P) { if (!Q->no_rotation) { const char* convention = pj_param (P->ctx, P->params, "sconvention").s; if( !convention ) { - proj_log_error (P, "helmert: missing 'convention' argument"); - return pj_default_destructor (P, PJD_ERR_MISSING_ARGS); + proj_log_error (P, _("helmert: missing 'convention' argument")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if( strcmp(convention, "position_vector") == 0 ) { Q->is_position_vector = 1; @@ -532,17 +532,17 @@ static PJ* read_convention(PJ* P) { Q->is_position_vector = 0; } else { - proj_log_error (P, "helmert: invalid value for 'convention' argument"); - return pj_default_destructor (P, PJD_ERR_INVALID_ARG); + proj_log_error (P, _("helmert: invalid value for 'convention' argument")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* historically towgs84 in PROJ has always been using position_vector * convention. Accepting coordinate_frame would be confusing. */ if (pj_param_exists (P->params, "towgs84")) { if( !Q->is_position_vector ) { - proj_log_error (P, "helmert: towgs84 should only be used with " - "convention=position_vector"); - return pj_default_destructor (P, PJD_ERR_INVALID_ARG); + proj_log_error (P, _("helmert: towgs84 should only be used with " + "convention=position_vector")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } } @@ -578,9 +578,9 @@ PJ *TRANSFORMATION(helmert, 0) { /* Detect obsolete transpose flag and error out if found */ if (pj_param (P->ctx, P->params, "ttranspose").i) { - proj_log_error (P, "helmert: 'transpose' argument is no longer valid. " - "Use convention=position_vector/coordinate_frame"); - return pj_default_destructor (P, PJD_ERR_INVALID_ARG); + proj_log_error (P, _("helmert: 'transpose' argument is no longer valid. " + "Use convention=position_vector/coordinate_frame")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* Support the classic PROJ towgs84 parameter, but allow later overrides.*/ @@ -612,9 +612,15 @@ PJ *TRANSFORMATION(helmert, 0) { if (pj_param (P->ctx, P->params, "ts").i) { Q->scale_0 = pj_param (P->ctx, P->params, "ds").f; if( Q->scale_0 <= -1.0e6 ) - return pj_default_destructor (P, PJD_ERR_INVALID_SCALE); + { + proj_log_error (P, _("helmert: invalid value for s.")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } if (pj_param (P->ctx, P->params, "ttheta").i && Q->scale_0 == 0.0) - return pj_default_destructor (P, PJD_ERR_INVALID_SCALE); + { + proj_log_error (P, _("helmert: invalid value for s.")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } } /* Translation rates */ diff --git a/src/transformations/hgridshift.cpp b/src/transformations/hgridshift.cpp index b28eaf48..1b2ff9b1 100644 --- a/src/transformations/hgridshift.cpp +++ b/src/transformations/hgridshift.cpp @@ -155,8 +155,8 @@ PJ *TRANSFORMATION(hgridshift,0) { P->right = PJ_IO_UNITS_RADIANS; if (0==pj_param(P->ctx, P->params, "tgrids").i) { - proj_log_error(P, "hgridshift: +grids parameter missing."); - return destructor (P, PJD_ERR_NO_ARGS); + proj_log_error(P, _("hgridshift: +grids parameter missing.")); + return destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* TODO: Refactor into shared function that can be used */ @@ -194,8 +194,8 @@ PJ *TRANSFORMATION(hgridshift,0) { Q->grids = pj_hgrid_init(P, "grids"); /* Was gridlist compiled properly? */ if ( proj_errno(P) ) { - proj_log_error(P, "hgridshift: could not find required grid(s)."); - return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_log_error(P, _("hgridshift: could not find required grid(s).")); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } gMutex.lock(); diff --git a/src/transformations/horner.cpp b/src/transformations/horner.cpp index 2c049186..d88ea152 100644 --- a/src/transformations/horner.cpp +++ b/src/transformations/horner.cpp @@ -460,12 +460,12 @@ PJ *PROJECTION(horner) { degree = pj_param(P->ctx, P->params, "ideg").i; if (degree < 0 || degree > 10000) { /* What are reasonable minimum and maximums for degree? */ - proj_log_debug (P, "Horner: Degree is unreasonable: %d", degree); - return horner_freeup (P, PJD_ERR_INVALID_ARG); + proj_log_error (P, _("Horner: Degree is unreasonable: %d"), degree); + return horner_freeup (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else { - proj_log_debug (P, "Horner: Must specify polynomial degree, (+deg=n)"); - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + proj_log_error (P, _("Horner: Must specify polynomial degree, (+deg=n)")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (pj_param (P->ctx, P->params, "tfwd_c").i || pj_param (P->ctx, P->params, "tinv_c").i) /* complex polynomium? */ @@ -473,7 +473,7 @@ PJ *PROJECTION(horner) { Q = horner_alloc (degree, complex_polynomia); if (Q == nullptr) - return horner_freeup (P, ENOMEM); + return horner_freeup (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; if (complex_polynomia) { @@ -483,9 +483,15 @@ PJ *PROJECTION(horner) { n = 2*degree + 2; if (0==parse_coefs (P, Q->fwd_c, "fwd_c", n)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing fwd_c")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } if (0==parse_coefs (P, Q->inv_c, "inv_c", n)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing inv_c")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } P->fwd4d = complex_horner_forward_4d; P->inv4d = complex_horner_reverse_4d; } @@ -493,19 +499,37 @@ PJ *PROJECTION(horner) { else { n = horner_number_of_coefficients (degree); if (0==parse_coefs (P, Q->fwd_u, "fwd_u", n)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing fwd_u")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } if (0==parse_coefs (P, Q->fwd_v, "fwd_v", n)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing fwd_v")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } if (0==parse_coefs (P, Q->inv_u, "inv_u", n)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing inv_u")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } if (0==parse_coefs (P, Q->inv_v, "inv_v", n)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing inv_v")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } } if (0==parse_coefs (P, (double *)(Q->fwd_origin), "fwd_origin", 2)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing fwd_origin")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } if (0==parse_coefs (P, (double *)(Q->inv_origin), "inv_origin", 2)) - return horner_freeup (P, PJD_ERR_MISSING_ARGS); + { + proj_log_error (P, _("Horner: missing inv_origin")); + return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG); + } if (0==parse_coefs (P, &Q->range, "range", 1)) Q->range = 500000; diff --git a/src/transformations/molodensky.cpp b/src/transformations/molodensky.cpp index bf5960d2..4a6584a9 100644 --- a/src/transformations/molodensky.cpp +++ b/src/transformations/molodensky.cpp @@ -245,7 +245,7 @@ static PJ_XYZ forward_3d(PJ_LPZ lpz, PJ *P) { lpz = calc_standard_params(lpz, P); } if( lpz.lam == HUGE_VAL ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xyz; } @@ -277,7 +277,7 @@ static PJ_LPZ reverse_3d(PJ_XYZ xyz, PJ *P) { lpz = calc_standard_params(point.lpz, P); if( lpz.lam == HUGE_VAL ) { - proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lpz; } @@ -297,10 +297,9 @@ static PJ_COORD reverse_4d(PJ_COORD obs, PJ *P) { PJ *TRANSFORMATION(molodensky,1) { - int count_required_params = 0; struct pj_opaque_molodensky *Q = static_cast<struct pj_opaque_molodensky*>(calloc(1, sizeof(struct pj_opaque_molodensky))); if (nullptr==Q) - return pj_default_destructor(P, ENOMEM); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = (void *) Q; P->fwd4d = forward_4d; @@ -314,39 +313,42 @@ PJ *TRANSFORMATION(molodensky,1) { P->right = PJ_IO_UNITS_RADIANS; /* read args */ - if (pj_param(P->ctx, P->params, "tdx").i) { - count_required_params ++; - Q->dx = pj_param(P->ctx, P->params, "ddx").f; + if (!pj_param(P->ctx, P->params, "tdx").i) + { + proj_log_error (P, _("molodensky: missing dx")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } + Q->dx = pj_param(P->ctx, P->params, "ddx").f; - if (pj_param(P->ctx, P->params, "tdy").i) { - count_required_params ++; - Q->dy = pj_param(P->ctx, P->params, "ddy").f; + if (!pj_param(P->ctx, P->params, "tdy").i) + { + proj_log_error (P, _("molodensky: missing dy")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } + Q->dy = pj_param(P->ctx, P->params, "ddy").f; - if (pj_param(P->ctx, P->params, "tdz").i) { - count_required_params ++; - Q->dz = pj_param(P->ctx, P->params, "ddz").f; + if (!pj_param(P->ctx, P->params, "tdz").i) + { + proj_log_error (P, _("molodensky: missing dz")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } + Q->dz = pj_param(P->ctx, P->params, "ddz").f; - if (pj_param(P->ctx, P->params, "tda").i) { - count_required_params ++; - Q->da = pj_param(P->ctx, P->params, "dda").f; + if (!pj_param(P->ctx, P->params, "tda").i) + { + proj_log_error (P, _("molodensky: missing da")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } + Q->da = pj_param(P->ctx, P->params, "dda").f; - if (pj_param(P->ctx, P->params, "tdf").i) { - count_required_params ++; - Q->df = pj_param(P->ctx, P->params, "ddf").f; + if (!pj_param(P->ctx, P->params, "tdf").i) + { + proj_log_error (P, _("molodensky: missing df")); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } + Q->df = pj_param(P->ctx, P->params, "ddf").f; Q->abridged = pj_param(P->ctx, P->params, "tabridged").i; - /* We want all parameters (except +abridged) to be set */ - if (count_required_params == 0) - return pj_default_destructor(P, PJD_ERR_NO_ARGS); - - if (count_required_params != 5) - return pj_default_destructor(P, PJD_ERR_MISSING_ARGS); - return P; } diff --git a/src/transformations/tinshift.cpp b/src/transformations/tinshift.cpp index 96e0ea4f..8b73c28c 100644 --- a/src/transformations/tinshift.cpp +++ b/src/transformations/tinshift.cpp @@ -86,14 +86,14 @@ PJ *TRANSFORMATION(tinshift, 1) { const char *filename = pj_param(P->ctx, P->params, "sfile").s; if (!filename) { - proj_log_error(P, "tinshift: +file= should be specified."); - return destructor(P, PJD_ERR_NO_ARGS); + proj_log_error(P, _("tinshift: +file= should be specified.")); + return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } auto file = NS_PROJ::FileManager::open_resource_file(P->ctx, filename); if (nullptr == file) { - proj_log_error(P, "tinshift: Cannot open %s", filename); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("tinshift: Cannot open %s"), filename); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0, SEEK_END); unsigned long long size = file->tell(); @@ -101,15 +101,15 @@ PJ *TRANSFORMATION(tinshift, 1) { // that could be a denial of service risk. 10 MB should be sufficiently // large for any valid use ! if (size > 10 * 1024 * 1024) { - proj_log_error(P, "tinshift: File %s too large", filename); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("tinshift: File %s too large"), filename); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0); std::string jsonStr; jsonStr.resize(static_cast<size_t>(size)); if (file->read(&jsonStr[0], jsonStr.size()) != jsonStr.size()) { - proj_log_error(P, "tinshift: Cannot read %s", filename); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("tinshift: Cannot read %s"), filename); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } auto Q = new tinshiftData(); @@ -119,8 +119,8 @@ PJ *TRANSFORMATION(tinshift, 1) { try { Q->evaluator.reset(new Evaluator(TINShiftFile::parse(jsonStr))); } catch (const std::exception &e) { - proj_log_error(P, "tinshift: invalid model: %s", e.what()); - return destructor(P, PJD_ERR_INVALID_ARG); + proj_log_error(P, _("tinshift: invalid model: %s"), e.what()); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } P->destructor = destructor; diff --git a/src/transformations/vgridshift.cpp b/src/transformations/vgridshift.cpp index 3d9f046a..b85e4ba4 100644 --- a/src/transformations/vgridshift.cpp +++ b/src/transformations/vgridshift.cpp @@ -179,8 +179,8 @@ PJ *TRANSFORMATION(vgridshift,0) { P->reassign_context = reassign_context; if (!pj_param(P->ctx, P->params, "tgrids").i) { - proj_log_error(P, "vgridshift: +grids parameter missing."); - return destructor(P, PJD_ERR_NO_ARGS); + proj_log_error(P, _("hgridshift: +grids parameter missing.")); + return destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* TODO: Refactor into shared function that can be used */ @@ -227,8 +227,8 @@ PJ *TRANSFORMATION(vgridshift,0) { /* Was gridlist compiled properly? */ if ( proj_errno(P) ) { - proj_log_error(P, "vgridshift: could not find required grid(s)."); - return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_log_error(P, _("vgridshift: could not find required grid(s).")); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } gMutex.lock(); diff --git a/src/transformations/xyzgridshift.cpp b/src/transformations/xyzgridshift.cpp index e37e874d..d00d6484 100644 --- a/src/transformations/xyzgridshift.cpp +++ b/src/transformations/xyzgridshift.cpp @@ -257,7 +257,7 @@ PJ *TRANSFORMATION(xyzgridshift,0) { // Pass a dummy ellipsoid definition that will be overridden just afterwards Q->cart = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart == nullptr) - return destructor(P, ENOMEM); + return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def (P, Q->cart); @@ -272,14 +272,14 @@ PJ *TRANSFORMATION(xyzgridshift,0) { // in RGF93 Q->grid_ref_is_input = false; } else { - proj_log_error(P, "xyzgridshift: unusupported value for grid_ref"); - return destructor (P, PJD_ERR_NO_ARGS); + proj_log_error(P, _("xyzgridshift: unusupported value for grid_ref")); + return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (0==pj_param(P->ctx, P->params, "tgrids").i) { - proj_log_error(P, "xyzgridshift: +grids parameter missing."); - return destructor (P, PJD_ERR_NO_ARGS); + proj_log_error(P, _("xyzgridshift: +grids parameter missing.")); + return destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* multiplier for delta x,y,z */ @@ -294,8 +294,8 @@ PJ *TRANSFORMATION(xyzgridshift,0) { Q->grids = pj_generic_grid_init(P, "grids"); /* Was gridlist compiled properly? */ if ( proj_errno(P) ) { - proj_log_error(P, "xyzgridshift: could not find required grid(s)."); - return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID); + proj_log_error(P, _("xyzgridshift: could not find required grid(s).")); + return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } } diff --git a/test/gie/4D-API_cs2cs-style.gie b/test/gie/4D-API_cs2cs-style.gie index ade75907..b4ceb4f6 100644 --- a/test/gie/4D-API_cs2cs-style.gie +++ b/test/gie/4D-API_cs2cs-style.gie @@ -495,7 +495,7 @@ expect 0 0 1 roundtrip 1 operation +proj=longlat +a=1 +b=1 +vto_meter=1/0 -expect failure errno unit_factor_less_than_0 +expect failure errno invalid_op_illegal_arg_value operation +proj=longlat +a=1 +b=1 +vto_meter=1000 +geoc accept 0 0 1000 @@ -522,7 +522,7 @@ roundtrip 1 # in the creation of a PJ object. ------------------------------------------------------------------------------- operation this is a bogus CRS meant to trigger a generic error in proj_create() -expect failure errno generic error +expect failure errno other ------------------------------------------------------------------------------- # Test proj=set diff --git a/test/gie/adams_hemi.gie b/test/gie/adams_hemi.gie index b31c3581..9d23b939 100644 --- a/test/gie/adams_hemi.gie +++ b/test/gie/adams_hemi.gie @@ -9,31 +9,31 @@ operation +proj=adams_hemi +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.0512914938 -90.1445918836 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -169.5842217825 -89.1738195765 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.8126151474 -88.9303357409 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.8486678837 -88.7598088570 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.3978823413 -88.5424937255 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.4584139907 -88.3017941113 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.6382190434 -88.1579367749 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.1571755829 -87.4911657719 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.4449870732 -87.1707570236 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.9433443609 -87.0825895518 expect -2032451.307 -14670658.595 @@ -90,61 +90,61 @@ accept 80.5231675121 -77.0660588617 expect 3923735.969 -12068158.388 accept 90.0066580543 -76.6161050638 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.5350349572 -76.3746207928 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.7544963160 -76.2761103137 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.0734970456 -75.8866598636 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.5824490023 -75.8761529489 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.8041765005 -75.3058724059 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.3183273801 -74.4580538960 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.0892519416 -73.7178034782 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.3366715442 -72.7342346131 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.6302993811 -72.6551561090 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.1498353863 -79.8617775679 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.6126454375 -78.9973036997 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5376706591 -78.3099466224 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.7206409942 -77.9762123582 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.5308439004 -77.1568269429 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.5655598613 -76.3111768828 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.7726048543 -75.3290637518 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.6962230001 -74.3833782562 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.6722260401 -73.9288741111 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.0043085338 -73.3335214021 expect -4844180.674 -11775270.656 @@ -201,61 +201,61 @@ accept 80.1994904845 -64.1621304539 expect 5574892.739 -10059995.184 accept 90.4107676644 -63.6583206132 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.7435829266 -62.9292855324 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.6722999581 -62.8950940661 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.8104324458 -62.4946649855 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.0315355771 -61.8657176607 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.7842333846 -61.7278379595 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.5202047210 -61.0467237730 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.7596965102 -60.2885251988 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1658638654 -60.0997063537 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.2502374139 -59.7318603713 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.9256771826 -69.2161805164 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.2003519382 -68.5724302106 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5787597594 -67.9857475830 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.8429607974 -67.2794853256 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.5406690392 -67.1131557084 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7848559822 -66.2388824806 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.1305416029 -65.8739932573 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.5840686978 -65.1388713461 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.0639263051 -65.0873010186 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.1823111373 -64.6956687932 expect -6023804.986 -10592902.952 @@ -312,61 +312,61 @@ accept 80.4614530617 -58.9769415123 expect 6157836.688 -9386832.221 accept 90.1145386062 -58.4070158299 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.7207579758 -58.0174867644 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5210303471 -57.2190055708 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.6967482820 -56.4709263993 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.0815389060 -55.4932687347 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.1058922487 -54.7233777967 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.7972249220 -54.0392541094 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.4001197642 -53.4894321537 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.7522870277 -52.8073510172 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.9552557119 -51.9628267761 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.8457680307 -59.7627027888 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.9866964666 -59.3961476674 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.7470584020 -58.4027994525 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.6934351691 -57.7899236032 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.8251656458 -57.1675573730 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7548669173 -56.7627741202 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.8194582121 -56.1851853006 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.9910713909 -55.2204505294 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.5100607596 -54.5311736441 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.8644038896 -53.9245170355 expect -7342928.224 -9343992.584 @@ -423,61 +423,61 @@ accept 80.9191136756 -48.5703968561 expect 7251379.374 -8116860.291 accept 90.3784337844 -48.2622816670 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.0644440138 -47.5531771971 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.4395693884 -47.1020565364 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.8787420308 -46.5648775386 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.8192016133 -45.7254461234 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6056889736 -45.1737240013 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.1175388463 -44.6690953878 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.6179845473 -44.6641530409 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.3909883495 -43.8609446159 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.3536945715 -43.4346766235 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.6728016921 -49.7927741248 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8899091213 -49.5948095572 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.7193834386 -48.9692766397 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3161804706 -48.3900540417 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.3059860307 -47.5443099911 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.2607005772 -47.3426945690 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.0464442962 -46.3637609990 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3006137776 -46.2470536112 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.1086587357 -45.3788313212 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.6418391342 -44.9558227898 expect -8329227.919 -8319528.025 @@ -534,61 +534,61 @@ accept 80.6995146991 -37.6252342058 expect 8295075.544 -6755019.382 accept 90.0888221682 -36.9847575823 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.7780137471 -36.6711774624 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5677826175 -36.0072187827 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.4571639125 -35.5987514678 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.4994689409 -35.0078880309 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.4973246226 -34.7603698284 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.2185553402 -33.7827115000 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.0049830768 -33.6576606654 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1113538332 -32.7218296414 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.0413323536 -32.6458132046 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.7614880705 -39.3083971924 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.2195161001 -38.8120777840 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.8162149104 -38.0579151517 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.1975646236 -38.0219346503 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.4875552064 -37.4333640809 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.3174577073 -37.3101077795 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.3659376731 -37.0018039210 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.4951561921 -36.7266176768 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.0146344791 -36.1766584469 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.4535006021 -35.4158065520 expect -9377248.574 -7225961.706 @@ -645,61 +645,61 @@ accept 80.7902728211 -26.9566814760 expect 9340735.895 -5359874.908 accept 90.7774660604 -26.3781900961 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.9677349413 -25.6947295847 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.4045415377 -24.8858012124 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.9106581244 -24.6760450197 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1070741983 -24.3713625355 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.5983717849 -23.4696540641 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.9695044815 -23.2859623288 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.2904693231 -22.4177486612 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.9786886104 -22.3889418243 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.4135817841 -21.4141834167 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.1529257481 -29.4728615966 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.2570543721 -28.7440325834 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.4124846191 -27.8743740104 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.9984258738 -27.2290510016 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.4767743694 -27.0546870326 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.5641039139 -26.6837015309 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.3705764793 -25.8611684419 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.5378587803 -25.4624789903 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.3734787689 -24.9304945684 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3465946697 -24.1700440971 expect -10704395.428 -5847361.236 @@ -756,61 +756,61 @@ accept 80.8671865869 -16.2424776439 expect 10422654.067 -3712280.432 accept 90.2461291404 -15.5645924718 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.9711143384 -14.9057684714 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5061775944 -13.9999376124 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.6646869394 -13.8762395278 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.4786384854 -13.6641917166 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.4992250881 -12.7990197875 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.0366235813 -12.4696803942 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.5278707110 -12.2720940753 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.3484529579 -12.2138862792 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.2280212650 -11.3213090122 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.9887698836 -19.8434403334 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.6164294546 -19.0221825561 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5308654294 -18.1879041212 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.8050966059 -17.4019446265 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.1612469827 -16.6625595025 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.4619391187 -16.4594418864 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.8383311004 -16.1675065524 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3335459376 -15.6868347454 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.7976668059 -15.6854972046 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.7267294244 -14.8632370454 expect -12053401.390 -4568307.176 @@ -867,61 +867,61 @@ accept 80.6138637845 -4.9732504580 expect 11379290.973 -1327935.989 accept 90.6032354861 -4.1370495786 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.1644532030 -3.7428216159 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.6488410247 -3.6483998900 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.4200133401 -3.5679026480 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.4611248753 -2.8417810196 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.5117693002 -2.1994039429 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.8812291858 -1.4289441365 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.7607399916 -1.4071810906 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.8773135555 -1.0552787291 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.0261501820 -0.4477561568 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.6651296552 -9.8752237332 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8040567331 -9.5090347854 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.2369236977 -8.7812050100 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.4668694945 -8.7411685014 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.4921425087 -8.4838585832 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.0489643890 -8.3165131291 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2267713387 -8.2419396541 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.8259504273 -7.2718622518 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9614377002 -7.1037710855 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.8090238071 -6.4232987368 expect -13640751.484 -2974873.944 @@ -978,61 +978,61 @@ accept 80.6476764259 3.6310845229 expect 11462634.636 984489.812 accept 90.5849650699 4.1063917523 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.6238525596 4.1230600723 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.6594697851 5.0495381196 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.0930076215 5.2661796574 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.5000547754 5.3939702157 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.4751452989 5.8876297478 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.7452375246 6.3021488806 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.1359677924 6.9173640629 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.0302177328 7.6378853558 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.8170157951 8.3472735471 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.1943150364 0.7596010223 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.6391212860 1.0795717122 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.2152700578 1.5596096157 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3566080854 2.3935395760 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.6411690265 2.8792042895 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.0884027419 3.3736512451 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.6412398776 3.5609941446 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.8410023851 4.3613065976 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.5554211656 5.1657533479 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3773565828 5.9157121060 expect -13652078.995 2749284.275 @@ -1089,61 +1089,61 @@ accept 80.2140199400 13.5624272700 expect 10571534.837 3165721.762 accept 90.4576635954 13.9718076506 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.6449925924 14.8800104945 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.2075367326 15.0521133300 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.4913041985 15.0889224537 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1088876084 15.6744717063 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6091054692 15.9789322360 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.8827038395 16.1118935785 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.8584892232 16.9655055987 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.7081605352 17.1424915281 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.4875952646 17.7286920734 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.2192819040 10.8569245931 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.0657035958 11.2213297367 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.1659774291 11.5431930234 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.9545173238 12.5029285949 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.3117413904 12.6753804804 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.3194639426 13.3306225335 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.8562785026 13.8682936931 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.1061461002 14.0130001331 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.6079217864 14.7921669533 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3223757109 14.9467935082 expect -11977848.908 4521084.682 @@ -1200,61 +1200,61 @@ accept 80.7948402736 23.3693033859 expect 9696270.644 4844753.993 accept 90.9423588456 23.9305098127 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.5427479545 24.6568371578 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.6483359564 25.2988879331 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.6254581560 25.7897168715 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.6198305384 26.5579713234 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.5223099495 27.4665102983 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.1770507578 27.9150551786 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.8757513817 28.5236724280 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.8877826460 29.0924417375 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.6425321330 29.5764205068 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.9444701529 20.8756448666 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.6232517758 21.6942653703 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5830169036 22.4130383475 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.4619550763 22.6339632787 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.7058201004 23.2553831478 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7766004320 23.8189681109 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.3228272091 24.7032636217 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.5551540716 24.7745254301 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9135718461 25.5385802763 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.1841069049 26.2083957447 expect -10431143.612 6091127.422 @@ -1311,61 +1311,61 @@ accept 80.9991967787 34.8943272959 expect 8589604.803 6432883.803 accept 90.5925677009 35.3510670805 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.0148954666 36.2711932097 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.4283207815 36.6017613088 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.6777960225 37.3666811945 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.2891249681 37.8530786142 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.8212942434 38.5395736955 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.7430926180 38.7113483726 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.9509577553 39.6821505727 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.3061167023 40.4192356875 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.9886935244 41.3233715669 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.3343647471 30.6447124879 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.9318029695 30.8088173910 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9351347433 31.4030041187 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.1603401895 31.7370508292 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.8411358400 31.9883214220 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.6487283950 32.2540792459 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.3377596938 32.5474903700 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.4052121056 32.6499740509 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9645719240 33.2634048792 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3430796801 33.3255757200 expect -9605176.890 6972552.471 @@ -1422,61 +1422,61 @@ accept 80.6903986951 43.0741360152 expect 7768806.954 7429525.503 accept 90.6634321726 43.5837411887 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.8304968356 44.3478015738 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.2734219112 44.4218804789 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.7981801963 44.9674252843 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.6206535666 45.4286113875 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.3730391283 46.0714239353 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.9426457881 46.5091534230 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.6115790352 47.4101077572 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.3277640796 48.0638373590 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.8477425796 48.8442357472 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.2598149320 40.1705017627 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.6056153255 40.1727881259 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.3396275493 41.0355246248 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3430287138 41.0573932198 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.3972998819 41.0866734660 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.2347342883 41.3220478306 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.9384666450 41.9087201484 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.1765297705 42.5137977627 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.7425660165 43.1240737964 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3631524858 43.6013437171 expect -8456598.089 8145902.918 @@ -1533,61 +1533,61 @@ accept 80.1015409967 53.6234824949 expect 6684866.077 8688618.853 accept 90.9390534980 54.4032676618 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.2275975816 54.6540829630 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.2799875321 55.5050863665 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.5746083149 55.8365526658 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.5493283922 55.8603600954 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.1036826064 56.0703761781 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.2683487285 56.7530037053 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.2871251380 57.2145257183 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1375706366 57.2304506879 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.2551410057 57.5449642224 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.4163113130 50.3425538005 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.9733110986 50.4458299488 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.7576358296 50.9581504113 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3417213155 51.6042289093 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.0195163151 51.8452436385 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.9037457234 52.0925641350 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.8773360504 52.9710431510 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3390467545 53.2106639106 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.5444768748 53.6966176349 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.1508332331 54.2933793206 expect -7253089.374 9338825.070 @@ -1644,61 +1644,61 @@ accept 80.2667195466 63.4462194528 expect 5659364.075 9965995.331 accept 90.1958404963 64.0831209279 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.5787966151 64.7750993019 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5253826702 65.0311314831 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.1812962078 65.3475412110 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.6287227669 65.6970336106 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.0181654960 66.0623612621 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.7856466511 66.3591210923 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.9724593003 66.6162174492 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.0946608724 66.6386212957 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.4742461481 67.2758505348 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.3409209668 60.7971917835 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8189576120 61.1637771517 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5389911401 61.2887975834 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.8226015684 61.6437737052 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.2361655032 62.2457658007 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.4677006422 63.0421916813 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2765495979 63.0575080285 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.6674914716 63.2917945558 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.7670971881 63.3834861911 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.8162159435 64.1409584458 expect -6128005.443 10556995.120 @@ -1755,61 +1755,61 @@ accept 80.1791569395 72.7183017021 expect 4529430.842 11315638.668 accept 90.8791736411 72.9059905421 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.0478827489 73.6259975169 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.4087249466 74.2803681973 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.3401612468 74.8365621394 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1826062634 75.5694271641 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.9483568214 75.9187393924 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.4892277622 76.6692051191 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.6382868956 77.4573927636 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.7717121538 77.8061856572 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.3573673565 78.0660690876 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.6675977383 70.0957203052 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.7405185971 70.8584256587 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5167125707 71.8322204655 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.0042143904 72.1158106531 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.0329602286 72.2542294354 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7801336775 73.2077231869 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.3119539671 73.8550759705 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.4758176356 74.3266149256 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.6607202273 75.0169362990 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.4753530769 75.9617981968 expect -4457168.999 12206697.987 @@ -1866,61 +1866,61 @@ accept 80.9787521274 84.9230149078 expect 2463890.570 13818835.453 accept 90.9143604315 85.3871192550 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.4734880731 86.0042464514 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.9680822795 86.3859461851 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.8622100732 87.2340544489 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.2558456040 87.3620502284 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.2081210889 87.9608446770 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.4963196965 88.3752399281 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.1141812758 89.1315428504 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.8037412086 89.6150717843 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.1602592915 90.5979873573 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.4988010038 80.2382292021 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.7323895837 80.2920174872 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9503807693 80.8196927273 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.0925061081 81.4663152862 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.5716369758 82.4286410234 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.8787197288 82.8456226975 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.4793423714 83.5516191256 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.2664761985 84.4756117750 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.3415573570 85.3222226381 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.5621686999 86.1477384313 expect -2328002.776 14359252.241 @@ -1950,171 +1950,171 @@ accept -9.7223365758 89.3832521756 expect -112026.906 15387878.248 accept 0.6641448256 90.0106423220 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 10.1860723801 90.3688642972 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 20.9490167192 90.7173958262 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.5649867370 90.9925163187 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.4458702150 91.4734308311 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.5856921606 91.9158720484 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.1363202035 92.2767051552 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.0710227099 93.2758942081 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.2222434482 93.6733349750 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.0483434140 94.4740404396 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.6823676393 95.0641687155 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.6403276588 95.6156935259 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.2581625576 96.0431766104 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.4609264126 96.4854267472 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.6441294534 96.7262713213 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.3252472008 97.1420609214 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.7668616164 97.4790143988 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.7465062128 97.6550567817 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.7542323137 98.2872938097 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.4933532172 89.0462961156 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8505428520 89.8903183246 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.6997771019 89.9583403191 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.2613507188 90.8395350848 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -139.1842997548 91.1573946186 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -129.6568991775 91.9446769249 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -119.3115606256 92.6597043587 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -109.6274703609 93.6500222571 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -99.3955363318 93.6790731121 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -89.4902277654 93.7101118679 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -79.2055095189 93.8973426839 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -69.2694919752 94.5715889948 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -59.2096313695 94.8767204910 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -49.3346426547 95.7619370286 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -39.2940192313 95.9177686800 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -29.1265263906 96.4025342806 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -19.8149677195 96.5067828223 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -9.2806942519 96.8402148749 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 0.9337491530 97.5569468760 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 10.2800898790 97.9514714385 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 20.9290209494 98.9284832763 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.3939457169 99.5719752144 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.6958590705 100.0328567981 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.1473239826 100.6776574030 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.6429472168 100.7044060498 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.8017862719 101.2635238404 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.3144473172 101.9663622692 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.7459660200 102.3134423218 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.1161002435 103.1947683448 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.1928396624 104.0579352787 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.2928981698 104.8100792607 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.4257286255 105.4176918707 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.8110132830 105.4248870814 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.8802025406 106.2350153626 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.3540927190 106.6211948814 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.1006211763 106.7429949781 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.9080349563 107.0582862622 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord </gie-strict> diff --git a/test/gie/adams_ws1.gie b/test/gie/adams_ws1.gie index fa9da8c6..3593fe12 100644 --- a/test/gie/adams_ws1.gie +++ b/test/gie/adams_ws1.gie @@ -10,10 +10,10 @@ operation +proj=adams_ws1 +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.5170670673 -90.3642618405 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -169.6193301609 -90.0089826784 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -159.5146913398 -89.9552061084 expect -350717.162 -11748881.092 @@ -1891,10 +1891,10 @@ accept 160.6971562328 89.4208328233 expect 1268680.941 11594325.039 accept 170.3991577317 90.3170479552 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.5908903286 90.7796418583 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.6672737749 80.9670130376 expect -5579975.368 11792148.700 @@ -1957,165 +1957,165 @@ accept 10.1878191712 89.8306694493 expect 61235.456 11123325.873 accept 20.3202271141 90.0891258483 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.4076531874 90.1655009485 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.4697816170 90.3073014721 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.0046280736 90.9081150272 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.2882853272 91.3234973005 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.1983790734 92.0487871293 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.2016298087 92.7883781050 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.1380649347 93.4193661081 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.9727810821 94.0036131508 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.2124518442 94.5588879261 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.9027437830 95.4070516655 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.4370128971 95.6659394457 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.5025123065 95.8655824422 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.4051276696 96.5597126498 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.6794810904 97.5509003421 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.0804614782 97.7962770171 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.7350988655 97.9297507566 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.6509243766 89.9594690425 expect -339016.824 11811270.987 accept -169.1462360158 90.2259103522 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -159.1237371257 91.0966186475 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -149.3864893992 92.0018593591 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -139.8836795793 92.7310580140 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -129.2447556879 93.0874941458 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -119.5691328385 94.0016439421 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -109.5375733271 94.6275672079 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -99.6767551820 94.9362396518 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -89.0765267674 95.5300020136 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -79.7404375474 95.8979843707 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -69.2186423862 96.1670313079 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -59.3116550382 97.0176191327 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -49.2194140278 97.9598960425 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -39.4423952109 97.9675789614 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -29.2846350035 98.7361321642 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -19.5599253582 98.8248133304 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -9.7751102831 99.2905137713 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 0.4459912613 99.9348079001 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 10.2556901904 100.0679369696 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 20.2129499464 100.4339484435 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.5120716507 100.8173987820 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.9186217475 101.3362169174 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.4499309674 101.7519777648 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.9618169609 101.9681616248 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.5136938969 102.7263743079 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.1112365376 103.4930742925 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.0656487088 104.2687818917 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.4737302350 105.1672304167 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.0826941374 105.9578331609 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.5038465053 106.4653112353 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.1946022249 107.2836000330 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.1612060920 108.2561565502 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.8381796528 108.3785139275 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.5344804952 109.2381208530 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.6816130052 110.0255190870 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.9197969760 110.0988929845 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord </gie-strict> diff --git a/test/gie/adams_ws2.gie b/test/gie/adams_ws2.gie index c2ff193f..06df3696 100644 --- a/test/gie/adams_ws2.gie +++ b/test/gie/adams_ws2.gie @@ -11,7 +11,7 @@ operation +proj=adams_ws2 +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.7092450238 -90.0290393775 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -169.9316998581 -89.6983443874 expect -2757243.603 -13694037.516 @@ -1886,16 +1886,16 @@ accept 140.8963110473 89.7228156694 expect 2304894.417 13439579.058 accept 150.4318097094 90.4391164019 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.7127363327 90.6605815936 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.7492804294 90.8176634524 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.4583398460 90.9109976584 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.7591323884 80.4424115493 expect -6903393.952 9786682.886 @@ -1964,160 +1964,160 @@ accept 30.8762585995 89.9894216623 expect 237234.260 14954822.615 accept 40.2272544657 90.2854737833 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.3342208278 90.6201781373 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.0620171885 91.1323497706 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.7871678571 91.2021231110 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.7237355733 91.8207335323 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.5359055804 91.8495346522 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.2370378259 92.3201685216 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.7018248262 92.7082390660 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.4791498907 92.8320642395 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.7292413039 93.7863129954 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.1002623482 94.2304861566 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.7401582820 94.4002034978 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.9690930362 95.0432445572 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.5238000008 95.9332496636 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.5593997844 96.9295538910 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.2788799656 89.7588830795 expect -2720982.745 13966946.704 accept -169.2920835775 90.4241930348 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -159.9895526197 91.4107597532 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -149.2463523987 92.1662912669 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -139.5441662785 93.0270602663 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -129.2489121030 93.8575161591 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -119.2218964968 94.3245277139 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -109.6391371233 94.8605218216 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -99.7022656135 95.4188372117 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -89.9236110047 96.1459344102 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -79.3053114467 96.4284727639 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -69.9403123372 97.1204524330 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -59.8919954903 98.0976036625 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -49.4360361183 99.0132534146 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -39.1296215520 99.7082663882 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -29.7429317093 100.3804719805 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -19.9518617483 100.7090523427 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -9.8094666546 100.7731576636 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 0.6789399156 101.1890038152 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 10.3002789517 101.6303167682 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 20.3122591998 101.9746447499 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.8403181671 102.1868812356 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.5913833272 102.9224326125 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.4094599185 103.4226263618 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.2807542048 103.6337815648 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.1179652096 103.9375646519 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.0709906538 104.9002368302 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.4905546467 104.9051484801 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.8677613905 105.1778053719 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.7875504667 106.1651152124 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.3531685812 106.2777498204 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.5786379336 106.8735960149 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.2390732913 107.1035922681 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.2230766093 107.9665006223 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.0106199737 108.8731447468 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.2666681817 109.4591245928 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.2003062924 109.9750225424 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord ------------------------------------------------------------------------------- # Test inverse @@ -2171,6 +2171,6 @@ roundtrip 1 direction inverse accept 0.000005801264 16722285.492330472916 -expect failure errno non_convergent +expect failure errno coord_transfm_outside_projection_domain </gie-strict> diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 813b67bb..b3c84f74 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -79,18 +79,18 @@ accept -200 -100 expect -0.001790493 -0.000895247 operation +proj=aea +ellps=GRS80 +lat_1=900 -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value operation +proj=aea +ellps=GRS80 +lat_2=900 -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value operation +proj=aea +R=6400000 +lat_1=1 +lat_2=-1 -expect failure errno conic_lat_equal +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=aea +a=9999999 +b=.9 +lat_2=1 ------------------------------------------------------------------------- -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Azimuthal Equidistant @@ -126,7 +126,7 @@ roundtrip 100 # point opposite projection center is undefined accept 180 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test equatorial aspect of the ellipsoidal azimuthal equidistant. Test data from @@ -269,11 +269,11 @@ roundtrip 100 #point opposite of projection center is undefined accept 0 -90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 0 5 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 0 3.14159265359 expect 180 -90 @@ -302,7 +302,7 @@ roundtrip 100 #point opposite of projection center is undefined accept 0 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- @@ -385,7 +385,7 @@ expect 0 -1.3863 accept 0 90 expect 0 0 accept 0 -90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- @@ -399,7 +399,7 @@ expect 0 1.3863 accept 0 -90 expect 0 0 accept 0 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test oblique aspect @@ -412,7 +412,7 @@ expect 0 0 accept 0 0 expect -0.7336 -0.5187 accept -45 -45 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test that coordinates on the opposing hemisphere are projected when using @@ -446,7 +446,7 @@ expect 0.3821 0.4216 operation +proj=airy +R=1 +no_cut ------------------------------------------------------------------------------- accept -180 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Aitoff @@ -1351,16 +1351,16 @@ operation +proj=eqdc +a=9999999 +b=.9 +lat_2=1 expect failure operation +proj=eqdc +R=6400000 +lat_1=1 +lat_2=-1 -expect failure errno conic_lat_equal +expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +R=6400000 +lat_1=91 -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +R=6400000 +lat_2=91 -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +R=1 +lat_1=1e-9 -expect failure errno conic_lat_equal +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Euler @@ -1679,12 +1679,12 @@ expect -0.001790493 -0.000895247 ------------------------------------------------------------------------------- operation +proj=geos +R=1 +h=0 ------------------------------------------------------------------------------- -expect failure errno invalid_h +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=geos +R=1 +h=1e11 ------------------------------------------------------------------------------- -expect failure errno invalid_h +expect failure errno invalid_op_illegal_arg_value @@ -1780,7 +1780,7 @@ accept 80 80 expect 5.6713 32.6596 roundtrip 100 accept 0 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # test that extreme northings are mapped to the sphere direction inverse @@ -1801,9 +1801,9 @@ accept 45 45 expect 0.7071 -0.7071 roundtrip 100 accept 0 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 90 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test the southern polar aspect of the gnonomic projection @@ -1818,9 +1818,9 @@ accept 45 -45 expect 0.7071 0.7071 roundtrip 100 accept 0 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 90 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test the oblique aspect of the gnonomic projection @@ -1838,7 +1838,7 @@ accept 0 90 expect 0 1 roundtrip 100 accept 0 -45 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Goode Homolosine @@ -1918,7 +1918,7 @@ expect 3450764.261536101 -175619.041820732 # For some reason, does not fail on MacOSX #accept 60 -45 -#expect failure errno tolerance_condition +#expect failure errno coord_transfm_outside_projection_domain direction inverse accept -1800000.000000000 2600000.000000000 @@ -1988,7 +1988,7 @@ expect -0.001790493 -0.000895247 operation +proj=hammer +a=6400000 +W=1 ------------------------------------------------------------------------------- accept -180 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Hatano Asymmetrical Equal Area @@ -2502,7 +2502,7 @@ expect 24.833333333333 59.757598563058 ------------------------------------------------------------------------------- operation +proj=krovak +lat_0=-90 ------------------------------------------------------------------------------- -expect failure errno invalid_arg +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Laborde @@ -2536,7 +2536,7 @@ expect 0.498202283 1.999095641 ------------------------------------------------------------------------------- operation +proj=labrd +ellps=GRS80 +lat_0=0 accept 0 0 -expect failure errno lat_0_is_zero +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Lambert Azimuthal Equal Area @@ -2557,7 +2557,7 @@ accept -2 -1 expect -222602.471450095 -110589.827224409 accept 180 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 200 100 @@ -2583,7 +2583,7 @@ accept -2 -1 expect -223365.281370125 -111716.668072916 accept 180 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 200 100 @@ -2619,7 +2619,7 @@ roundtrip 100 # error when waaay outside the sphere direction inverse accept 0 10 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test oblique aspect of the ellipsoidal form @@ -2662,7 +2662,7 @@ expect 0 0.7654 accept 0 45 expect 0 1.8478 accept 0 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain tolerance 0.1 mm accept 45 45 @@ -2683,7 +2683,7 @@ expect 0 4889334.8030 accept 0 45 expect 0 11766619.5307 accept 0 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain tolerance 10 cm accept 45 45 @@ -2709,7 +2709,7 @@ expect 0 -0.7654 accept 0 -45 expect 0 -1.8478 accept 0 -90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain tolerance 0.1 mm accept 45 45 @@ -2730,7 +2730,7 @@ expect 0 -4889334.8030 accept 0 -45 expect 0 -11766619.5307 accept 0 -90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain tolerance 10 cm accept 45 45 @@ -2740,7 +2740,7 @@ roundtrip 100 # Test error in projection setup ------------------------------------------------------------------------------- operation +proj=laea +ellps=GRS80 +lat_0=91 -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Lagrange @@ -2782,22 +2782,22 @@ expect 0.10 0.0 ------------------------------------------------------------------------------- operation +proj=lagrng +R=1 +W=-1 ------------------------------------------------------------------------------- -expect failure errno w_or_m_zero_or_less +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lagrng +R=1 +lat_1=90.00001 ------------------------------------------------------------------------------- -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lagrng +R=1 +W=0.5 ------------------------------------------------------------------------------- accept 90 0 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 2 0 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- operation +proj=lagrng +R=1 @@ -2966,7 +2966,7 @@ expect 1 2 ------------------------------------------------------------------------------- operation +proj=lcc +a=9999999 +b=.9 +lat_2=1 ------------------------------------------------------------------------------- -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- # This case is incredible. ossfuzz has found the exact value of lat_1 that @@ -2975,42 +2975,42 @@ operation +proj=lcc +lat_1=2D32 +lat_2=0 +a=6378137 +b=0.2 ------------------------------------------------------------------------------- expect failure # For some reason fails on MacOSX with a different error -# errno invalid_eccentricity +# errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=GRS80 +lat_1=0 +lat_2=90 ------------------------------------------------------------------------------- -expect failure errno lat_1_or_2_zero_or_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=GRS80 +lat_1=90 +lat_2=0 ------------------------------------------------------------------------------- -expect failure errno lat_1_or_2_zero_or_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=GRS80 +lat_1=90 +lat_2=90 ------------------------------------------------------------------------------- -expect failure errno lat_1_or_2_zero_or_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=sphere +lat_1=0 +lat_2=90 ------------------------------------------------------------------------------- -expect failure errno lat_1_or_2_zero_or_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=sphere +lat_1=90 +lat_2=0 ------------------------------------------------------------------------------- -expect failure errno lat_1_or_2_zero_or_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=sphere +lat_1=91 ------------------------------------------------------------------------------- -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=lcc +ellps=sphere +lat_2=91 ------------------------------------------------------------------------------- -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Lambert Conformal Conic Alternative @@ -3187,7 +3187,7 @@ operation +proj=lsat +path=1 +lsat=5 +ellps=sphere ------------------------------------------------------------------------------- direction inverse accept 0 1e10 -expect failure errno invalid_x_or_y +expect failure errno coord_transfm_outside_projection_domain =============================================================================== # McBryde-Thomas Flat-Polar Sine (No. 1) @@ -3930,13 +3930,13 @@ accept 45 45 expect 0.4555 -0.4555 roundtrip 100 accept 0 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 0 0 expect 0 90 accept 0 2 # projected coordinate is outside the sphere -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test south polar aspect @@ -3950,7 +3950,7 @@ accept -45 -45 expect -0.4555 0.4555 roundtrip 100 accept 0 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- operation +proj=nsper +R=1 +h=3 +lat_0=45 @@ -3970,12 +3970,12 @@ roundtrip 100 ------------------------------------------------------------------------------- operation +proj=nsper +R=1 +h=0 ------------------------------------------------------------------------------- -expect failure errno invalid_h +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=nsper +R=1 +h=1e11 ------------------------------------------------------------------------------- -expect failure errno invalid_h +expect failure errno invalid_op_illegal_arg_value =============================================================================== @@ -4042,7 +4042,7 @@ expect -65.862385599 51.830295078 ------------------------------------------------------------------------------- operation +proj=ob_tran +R=6400000 +o_proj +o_proj=ob_tran ------------------------------------------------------------------------------- -expect failure errno pjd_err_failed_to_find_proj +expect failure errno invalid_op_missing_arg =============================================================================== # Oblique Cylindrical Equal Area @@ -4241,7 +4241,7 @@ operation +proj=omerc +R=1 +lat_0=1 +lat_1=2 +no_rot ------------------------------------------------------------------------------- direction inverse accept 0 1e200 -expect failure errno invalid_x_or_y +expect failure errno coord_transfm_outside_projection_domain @@ -4263,28 +4263,28 @@ expect -3569.825230822232 -5093592.310871849768 ------------------------------------------------------------------------------- operation +proj=omerc +R=1 +alpha=0 +lat_0=90 ------------------------------------------------------------------------------- -expect failure errno lat_0_or_alpha_eq_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=omerc +lat_1=0.1 +a=6400000 +b=1 ------------------------------------------------------------------------------- # Disabled since fails on i386. Not so important. Edge condition found by ossfuzz -#expect failure errno invalid_eccentricity +#expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=omerc +lat_1=0.8 +a=6400000 +b=.4 ------------------------------------------------------------------------------- -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=omerc +lat_1=91 ------------------------------------------------------------------------------- -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=omerc +lat_2=91 ------------------------------------------------------------------------------- -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value =============================================================================== @@ -4356,11 +4356,11 @@ accept 90 90 expect 0 1 roundtrip 100 accept 120 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 2 2 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- @@ -4390,11 +4390,11 @@ accept 170 60 expect 0.0868 0.9799 roundtrip 100 accept 140 20 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 2 2 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- @@ -4419,13 +4419,13 @@ accept 90 0 expect 1 0 roundtrip 100 accept 180 -90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 0 -45 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 2 2 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test the south polar aspect of the Orthographic projection. @@ -4449,13 +4449,13 @@ accept 90 0 expect 1 0 roundtrip 100 accept 180 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 0 45 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 2 2 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Put a point a tiny tiny bit outside the radius of the sphere. # Since we are right at the numerical limit of floating point representation @@ -4496,7 +4496,7 @@ expect -6378137 18504.1253 # Slightly outside direction inverse accept -6378137.001 18504.1253 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # On boundary of visibility domain direction forward @@ -4507,7 +4507,7 @@ expect 0 -6343601.0991 # Just on it, but fails to converge. This test might be fragile direction inverse accept 0 -6343601.099075031466782093 -expect failure errno non_convergent +expect failure errno coord_transfm_outside_projection_domain # Slightly inside direction inverse @@ -4559,11 +4559,11 @@ roundtrip 1 # Point not visible from the projection plane accept 90.00001 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Point not visible from the projection plane accept -90.00001 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Consistent with WGS84 semi-major axis accept 90 0 @@ -4586,17 +4586,17 @@ roundtrip 1 # Point not visible from the projection plane direction inverse accept 0 6356752.3143 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Point not visible from the projection plane direction inverse accept 1000 6356752.314 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Point not visible from the projection plane direction inverse accept 6378137.0001 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # North pole tests @@ -4617,7 +4617,7 @@ roundtrip 1 # Point not visible from the projection plane accept 0 -0.0000001 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Consistent with WGS84 semi-major axis accept 0 0 @@ -4627,7 +4627,7 @@ roundtrip 1 # Point not visible from the projection plane direction inverse accept 0 -6378137.1 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # South pole tests @@ -4644,7 +4644,7 @@ roundtrip 1 # Point not visible from the projection plane accept 0 0.0000001 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain # Consistent with WGS84 semi-major axis accept 0 0 @@ -4654,7 +4654,7 @@ roundtrip 1 # Point not visible from the projection plane direction inverse accept 0 6378137.1 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain =============================================================================== @@ -5209,7 +5209,7 @@ accept 0.000000000000 -8654720.000000000000 expect 0 -90 accept 17250000 100000 -expect failure errno lat_or_lon_exceed_limit +expect failure errno coord_transfm_outside_projection_domain =============================================================================== @@ -5486,7 +5486,7 @@ expect -223407.810259507 111737.938996443 accept -2 -1 expect -223407.810259507 -111737.938996443 accept 180 0 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain direction inverse accept 200 100 @@ -5978,7 +5978,7 @@ operation +proj=tmerc +R=1 ------------------------------------------------------------------------------- direction inverse accept -1e200 0 -expect failure errno invalid_x_or_y +expect failure errno coord_transfm_outside_projection_domain =============================================================================== @@ -6137,10 +6137,10 @@ operation +proj=tobmerc +ellps=sphere # Test expected failure at the poles: ------------------------------------------------------------------------------- accept 0 90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 0 -90 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain =============================================================================== @@ -6287,7 +6287,8 @@ expect -45.001432287 64.914588378 ------------------------------------------------------------------------------- operation +proj=ups +a=6400000 ------------------------------------------------------------------------------- -expect failure errno ellipsoid_use_required +# ups not possible on sphere +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Urmaev V @@ -6309,7 +6310,7 @@ accept -2 -1 expect -223393.638433964 -111696.818785117 operation +proj=urm5 +a=6400000 +n=1 +alpha=90 -expect failure errno lat_0_or_alpha_eq_90 +expect failure errno invalid_op_illegal_arg_value =============================================================================== # Urmaev Flat-Polar Sinusoidal @@ -6385,7 +6386,8 @@ expect 687071.43911000 6210141.32675053 0.00000000 2000.0000 ------------------------------------------------------------------------------- operation +proj=utm +a=6400000 +zone=30 ------------------------------------------------------------------------------- -expect failure errno ellipsoid_use_required +# utm not possible on sphere +expect failure errno invalid_op_illegal_arg_value =============================================================================== # van der Grinten (I) @@ -6421,7 +6423,7 @@ operation +proj=vandg +R=1 ------------------------------------------------------------------------------- direction inverse accept 0 -1e100 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain =============================================================================== @@ -6901,18 +6903,18 @@ roundtrip 1 # missing X_0,Y_0,Z_0 or lon_0,lat_0 operation +proj=topocentric +ellps=WGS84 -expect failure errno missing_args +expect failure errno invalid_op_missing_arg # missing Z_0 operation +proj=topocentric +ellps=WGS84 +X_0=0 +Y_0=0 -expect failure errno missing_args +expect failure errno invalid_op_missing_arg # missing lat_0 operation +proj=topocentric +ellps=WGS84 +lon_0=0 -expect failure errno missing_args +expect failure errno invalid_op_missing_arg # X_0 and lon_0 are mutually exclusive operation +proj=topocentric +ellps=WGS84 +X_0=0 +lon_0=0 -expect failure errno mutually_exclusive_args +expect failure errno invalid_op_mutually_exclusive_args </gie-strict> diff --git a/test/gie/defmodel.gie b/test/gie/defmodel.gie index 94dd5784..95264c82 100644 --- a/test/gie/defmodel.gie +++ b/test/gie/defmodel.gie @@ -8,15 +8,15 @@ Test +proj=defmodel # Missing +model operation +proj=defmodel -expect failure errno no_args +expect failure errno invalid_op_missing_arg # +model doesn't point to an existing file operation +proj=defmodel +model=i_do_not_exist -expect failure errno invalid_arg +expect failure errno invalid_op_file_not_found_or_invalid # Not a JSON file operation +proj=defmodel +model=proj.ini -expect failure errno invalid_arg +expect failure errno invalid_op_file_not_found_or_invalid # Horizontal deformation with horizontal unit = degree operation +proj=defmodel +model=tests/simple_model_degree_horizontal.json diff --git a/test/gie/deformation.gie b/test/gie/deformation.gie index cda2e5ac..086c1ebe 100644 --- a/test/gie/deformation.gie +++ b/test/gie/deformation.gie @@ -47,7 +47,6 @@ operation +proj=deformation +xy_grids=alaska +z_grids=egm96_15.gtx \ +ellps=GRS80 +dt=16.0 # 2016.0 - 2000.0 ------------------------------------------------------------------------------- tolerance 0.1 mm -ignore pjd_err_failed_to_load_grid accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 expect -3004295.7000 -1093474.2097 5500477.3397 roundtrip 5 @@ -55,9 +54,9 @@ roundtrip 5 # Test that errors are reported for coordinates outside the grid. # Here we test 120W 40N which is well outside the alaska grid. accept -2446353.8001 -4237209.0750 4077985.572 -expect failure errno grid_area +expect failure errno coord_transfm_outside_grid accept -2446353.8001 -4237209.0750 4077985.572 -expect failure errno grid_area +expect failure errno coord_transfm_outside_grid ------------------------------------------------------------------------------- @@ -68,34 +67,32 @@ operation +proj=deformation \ ------------------------------------------------------------------------------- tolerance 0.1 mm direction inverse -ignore pjd_err_failed_to_load_grid accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 2000.0 expect -3004295.7000 -1093474.2097 5500477.3397 2000.0 roundtrip 5 ------------------------------------------------------------------------------- operation proj=deformation xy_grids=alaska +dt=1.0 ellps=GRS80 -expect failure pjd_err_no_args +expect failure errno invalid_op_missing_arg operation proj=deformation z_grids=egm96_15.gtx +dt=1.0 ellps=GRS80 -expect failure pjd_err_no_args +expect failure errno invalid_op_missing_arg operation proj=deformation xy_grids=nonexisting z_grids=egm96_15.gtx \ +dt=1.0 ellps=GRS80 -expect failure pjd_err_failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid operation proj=deformation xy_grids=alaska z_grids=nonexisting \ +dt=1.0 ellps=GRS80 -expect failure pjd_err_failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid operation proj=deformation xy_grids=alaska z_grids=nonexisting ellps=GRS80 -expect failure pjd_err_missing_args +expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=egm96_15.gtx +t_epoch=2010.0 +t_final=2018.0 ------------------------------------------------------------------------------- tolerance 0.1 mm -ignore pjd_err_failed_to_load_grid accept 12 56 0.0 2000.0 expect 12 56 -36.9960 2000.0 @@ -118,7 +115,6 @@ roundtrip 100 operation +proj=vgridshift +grids=egm96_15.gtx +t_epoch=2010.0 +t_final=now ------------------------------------------------------------------------------- tolerance 0.1 mm -ignore pjd_err_failed_to_load_grid accept 12 56 0.0 2000.0 expect 12 56 -36.9960 2000.0 @@ -137,7 +133,6 @@ roundtrip 100 operation +proj=hgridshift +grids=alaska +t_epoch=2010.0 +t_final=2018.0 ------------------------------------------------------------------------------- tolerance 0.1 mm -ignore pjd_err_failed_to_load_grid accept -147.0 64.0 0.0 2000.0 expect -147.0023233121 63.9995792119 0.0 2000.0 @@ -155,7 +150,6 @@ roundtrip 100 operation +proj=hgridshift +grids=alaska +t_epoch=2010.0 +t_final=now ------------------------------------------------------------------------------- tolerance 0.1 mm -ignore pjd_err_failed_to_load_grid accept -147.0 64.0 0.0 2000.0 expect -147.0023233121 63.9995792119 0.0 2000.0 diff --git a/test/gie/ellipsoid.gie b/test/gie/ellipsoid.gie index 5e0049f7..ea0e326a 100644 --- a/test/gie/ellipsoid.gie +++ b/test/gie/ellipsoid.gie @@ -53,22 +53,22 @@ expect 1335833.8895192828 7326837.7148738774 # Then try to fail deliberately ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80000000000 -expect failure errno unknown_ellp_param +expect failure errno invalid_op_illegal_arg_value operation proj=merc +a=-1 -expect failure errno major_axis_not_given +expect failure errno invalid_op_illegal_arg_value operation proj=merc accept 0 0 expect 0 0 -operation proj=merc +es=-1 -expect failure errno major_axis_not_given +operation proj=merc +a=1 +es=-1 +expect failure errno invalid_op_illegal_arg_value operation proj=merc +R=0 -expect failure errno major_axis_not_given +expect failure errno invalid_op_illegal_arg_value operation +proj=merc +R_a +a=2 +f=2 -expect failure errno major_axis_not_given +expect failure errno invalid_op_illegal_arg_value operation expect failure @@ -117,8 +117,6 @@ expect 1338073.2696101593 7374207.4801437631 ------------------------------------------------------------------------------- operation proj=merc a=1E77 R_lat_a=90 b=1 -# errno invalid_eccentricity on x86_64 -# errno pjd_err_ref_rad_larger_than_90 on i386 expect failure ------------------------------------------------------------------------------- @@ -136,25 +134,25 @@ expect -1.56904 0 # Shape parameters ------------------------------------------------------------------------------- operation proj=utm zone=32 ellps=GRS80 rf=0 -expect failure errno rev_flattening_is_zero +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 e=-0.5 -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 e=1 -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 es=1 -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 a=1 es=1.1 -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 b=0 -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 f=1 -expect failure errno invalid_eccentricity +expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 b=6000000 accept 12 55 diff --git a/test/gie/geotiff_grids.gie b/test/gie/geotiff_grids.gie index b71ed774..7e03d20a 100644 --- a/test/gie/geotiff_grids.gie +++ b/test/gie/geotiff_grids.gie @@ -151,13 +151,13 @@ expect 4.05 52.1 10 ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_invalid_channel_type.tif +multiplier=1 ------------------------------------------------------------------------------- -expect failure errno failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_unsupported_byte.tif +multiplier=1 ------------------------------------------------------------------------------- -expect failure errno failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- @@ -181,7 +181,7 @@ accept 179.8 54.5 0 expect 179.8 54.5 -0.7011 accept 179.799 54.5 0 -expect failure errno grid_area +expect failure errno coord_transfm_outside_grid accept 180.1833333 54.5 0 expect -179.8166667 54.5 -3.1933 @@ -190,10 +190,10 @@ accept -179.8166667 54.5 0 expect -179.8166667 54.5 -3.1933 accept 180.184 54.5 0 -expect failure errno grid_area +expect failure errno coord_transfm_outside_grid accept -179.816 54.5 0 -expect failure errno grid_area +expect failure errno coord_transfm_outside_grid ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid.tif @@ -327,7 +327,7 @@ accept -45.0 22.5 5 ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_vgrid.tif ------------------------------------------------------------------------------- -expect failure errno failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- diff --git a/test/gie/guyou.gie b/test/gie/guyou.gie index f311c173..2ed2ab49 100644 --- a/test/gie/guyou.gie +++ b/test/gie/guyou.gie @@ -9,31 +9,31 @@ operation +proj=guyou +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.2338274749 -90.7265739758 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -169.3015609686 -90.0683270041 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -159.4420546811 -89.5695551279 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.0045856345 -89.3536369188 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.7153960960 -88.6283945950 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.2286632319 -88.1551228787 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.6286953558 -87.5083524092 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3328522812 -86.7510648640 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.1598524965 -86.5788079857 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3858632536 -85.7390309668 expect -671252.534 -11805089.168 @@ -90,61 +90,61 @@ accept 80.2085188693 -77.6809008485 expect 1936586.409 -11469925.164 accept 90.8009658259 -76.9680414794 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.6742326194 -76.5942100817 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5209403479 -75.7585741711 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.5896919383 -74.7649093703 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.7851397036 -73.8582467239 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.7197125638 -72.9106110624 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.4163065521 -72.4059990981 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.4383759680 -71.9757412863 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.5708534042 -71.9525642223 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.2751947006 -71.5923171899 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.7095201992 -79.9687467646 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.0436424710 -79.2424043855 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.2911675882 -78.8917009107 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.2815042820 -78.0224816760 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.5027225646 -77.9987560452 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.2026665027 -77.1138023157 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.6161746714 -76.2954327600 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.9384914753 -75.7674050764 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.2183181307 -75.3730011624 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.2190150125 -74.7701795551 expect -2454071.146 -11777557.324 @@ -201,61 +201,61 @@ accept 80.8997122704 -66.2858473379 expect 3898590.190 -11120572.688 accept 90.1834036836 -65.9440561722 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.1984006355 -65.8229326488 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.0486236854 -65.7960345782 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.0510835725 -65.5190096678 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.0896340570 -64.7428784330 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.3678752942 -64.2229928140 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.9150615805 -63.6990548356 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.7280406636 -63.2384418688 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.9183869916 -62.3774990742 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.5619551786 -61.8063907044 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.5943789042 -69.9992085183 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.2134281484 -69.9776667645 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.4518981501 -69.3934026425 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3420413989 -68.4537518490 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.1131932532 -67.9826718761 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7785737569 -67.0804523760 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.8160590971 -66.1963102135 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.4603476745 -65.8550220266 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.0748524068 -64.9756976432 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.9206313411 -64.7601702734 expect -4268828.098 -11805632.912 @@ -312,61 +312,61 @@ accept 80.0904535261 -56.6354279372 expect 5822685.735 -10504356.087 accept 90.6634211024 -56.5251359813 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.1452342443 -55.8401169432 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.6864799856 -55.5116401637 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.3347823427 -55.2601958124 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.5134926951 -55.0238926067 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.3265242174 -54.4313834318 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.3685976599 -54.1552793246 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.9436711470 -53.1842316256 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.4034003030 -52.8621841373 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.0812683568 -52.6818511960 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.2224188803 -59.7295306861 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.4132895133 -59.2803345438 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.2336212919 -58.3674875157 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.6086565801 -57.6885943847 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.4537382278 -57.2767531329 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.8015642819 -57.0799116685 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.7728590554 -56.2047588377 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.7735055519 -55.4019628150 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.4371631073 -55.2867551270 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.8854290226 -55.2220077227 expect -6418775.726 -11794916.199 @@ -423,61 +423,61 @@ accept 80.4369996020 -46.9794332723 expect 8182405.160 -9269149.720 accept 90.9151039880 -46.9029866463 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.4373534616 -46.3943619602 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.2842129880 -46.0308507793 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.6486866778 -45.8054277747 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.9364857762 -44.8554259969 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6165699073 -43.9676693909 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.9528142413 -43.4405627423 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.5641245537 -42.8137396224 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.0938980656 -42.4864250646 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.3769971687 -41.5989802375 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.6808058361 -49.7903016746 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.7237623059 -49.1268921477 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.4102418582 -48.8849591656 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.2254953136 -48.1844242863 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.6041758915 -48.1179744801 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.3754143228 -47.1336832541 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.9746970079 -46.6736994965 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.7581919902 -46.0366124472 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.3823846098 -45.2381613350 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.0277852820 -44.5174266340 expect -11094288.600 -10444365.724 @@ -534,61 +534,61 @@ accept 80.3791490145 -38.1923095026 expect 9574134.022 -7007709.059 accept 90.5297378114 -37.5687159826 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.5373276614 -37.4573903187 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.0551604465 -36.8785291472 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.5920897044 -36.3504262236 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1692367892 -36.3071095311 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.0034604349 -35.8053875550 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.9162515055 -35.0369229256 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.4006102901 -34.7824559736 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.8020614665 -34.6367632672 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.1238278697 -34.5735242626 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.3392011550 -39.0089519711 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.9896135260 -38.7758352491 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9464206150 -38.3643075290 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.8580885141 -38.2565849818 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.0005407033 -37.8175552179 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.9744744916 -36.9749101428 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.4953757022 -36.8251466679 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.8732055905 -36.2644266473 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.2563126423 -35.6283177384 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.2720021301 -34.8337636531 expect -11652944.582 -6432012.406 @@ -645,61 +645,61 @@ accept 80.2959404087 -25.8737294352 expect 10093881.725 -4297066.952 accept 90.1903848581 -25.5035070096 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.5725497895 -24.6749860350 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.0757522922 -23.8621044004 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.4910038636 -23.3154304481 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.4609905705 -22.3944602016 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6308884892 -22.1941484220 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.0358167607 -21.7789499055 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.5878069076 -21.7481812197 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.4050593367 -20.8432353205 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.6001699300 -20.8118177919 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.3361000782 -29.8463222037 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8999068245 -28.9429338477 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.7592377898 -28.1615925042 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.9913638701 -28.0372332017 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.2301202473 -27.0565876723 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.1268966632 -26.9865340393 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2460222852 -26.3197565889 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.2062914741 -26.1682287226 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9045914125 -25.7799438486 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.4037956256 -25.6991927518 expect -11705355.483 -4359448.179 @@ -756,61 +756,61 @@ accept 80.3956836685 -17.4271102390 expect 10234009.562 -2784279.451 accept 90.6808556357 -16.9481935094 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.3669156655 -16.2433923188 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.3790328662 -15.6932515137 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.0882522480 -15.6441029970 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.9326190128 -15.1072978015 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.4297399110 -14.7647959439 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.6670621082 -14.1800360544 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.3083279810 -13.5438931052 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.8801051896 -12.6909069291 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.9127621133 -11.7358777998 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.9634704329 -19.2242789077 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.1616383718 -18.5021923570 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.5989242161 -17.7569846767 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.7658699571 -17.6838689314 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.2283007229 -17.1203530837 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.9856069274 -16.5121558117 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.7066160149 -15.8271303941 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.0808307002 -15.7236132624 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.7051569128 -15.2351555878 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.3984343202 -14.2830109769 expect -11714485.527 -2294583.435 @@ -867,61 +867,61 @@ accept 80.1896127919 -6.1835665729 expect 10268415.013 -962009.778 accept 90.2901075635 -5.6342271039 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.1017071129 -4.7732910406 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.6453720127 -4.6247740358 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.7065181706 -4.2131506322 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.0549243427 -3.6680122287 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.9588650575 -3.4693258990 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.3128054514 -2.8622073994 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.6250791828 -2.1132082532 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1249865639 -1.7779699685 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.4636820369 -1.0447468723 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.0903238876 -9.3809572676 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8021514554 -8.8200596604 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.6897632216 -8.8151211116 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3642571872 -7.9578518334 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.1869613409 -7.1376473645 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.8103143949 -6.6533639455 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.0042762894 -6.5424897944 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3222469320 -6.2626405858 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.2447484897 -5.4322064514 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.6583934020 -4.8520491055 expect -11758391.270 -764820.107 @@ -978,61 +978,61 @@ accept 80.4040420231 2.1516254056 expect 10309233.052 333889.458 accept 90.0745563464 2.5008083079 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.1323994743 3.4798778581 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.7633392793 3.6524418056 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.4935453458 3.8138602324 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1832453461 4.1827817395 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6879708211 4.3228601350 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.2872780471 5.0096390922 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.4567844437 5.3289862640 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1798195714 5.7690110660 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.6237066153 6.6873727446 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.1879408995 0.2925675717 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8193242429 0.5456299185 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.6143094365 0.8491614798 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.1327424918 1.5360082778 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.9118046279 2.2304783506 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.0707848713 3.1774300866 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.0155367869 3.7108516861 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.7138958240 4.2367325538 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.7626123411 4.9489248449 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.0617378460 5.0261998535 expect -11664192.229 792317.110 @@ -1089,61 +1089,61 @@ accept 80.6785108917 11.6138802990 expect 10322728.590 1826238.813 accept 90.9684446145 11.7088334392 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.8216260873 12.6522648050 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.9341322494 12.8091489452 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.9598573820 12.9840580805 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1838852888 13.9674113487 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.0163435591 14.2583869011 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.3440941987 15.1977215509 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.6373902313 15.9779535702 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.7489315029 16.0224553269 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.4315909707 16.2341190017 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.9613846400 10.9181102314 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.2464750707 11.2011582425 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.3961353214 12.0814824633 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.9176675016 12.1332225594 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.0300120770 12.7448426145 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.1479377942 13.2115900349 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.6509465671 13.5121287506 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3485953585 13.9838806488 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.8025484668 14.3000196702 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.6183447418 14.3419323455 expect -11750225.007 2304558.947 @@ -1200,61 +1200,61 @@ accept 80.2433369822 23.0164275848 expect 10137749.549 3763259.969 accept 90.9377687408 23.1511733038 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.5407405945 23.7761284488 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.0059145808 24.0087396721 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.0839708022 24.8505061022 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.5684827033 25.5457759639 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.2735017629 25.7841586919 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.4960718541 26.4511385776 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.5086557650 26.5248940712 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1010951379 26.6437577891 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.4667032708 27.5171288037 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.2332673731 20.5208357556 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.9852102849 20.6884242583 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.0918834805 20.7807287727 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3554284700 21.5195488802 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.0517203599 22.3228377599 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7889045882 22.9579802676 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2864956877 23.1541372478 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.1249371549 23.9554652672 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.7886236408 24.2156608317 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.8158531726 24.4254617574 expect -11779801.464 4109615.321 @@ -1311,61 +1311,61 @@ accept 80.8754092571 33.4499285913 expect 9965465.329 5886025.407 accept 90.9417476435 34.2241428842 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.8763555867 34.9730810876 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.3824336404 35.8924849218 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.3907138338 36.0772654252 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.2213236652 36.3411661168 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6643127929 37.0777875387 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.5696707234 38.0028546554 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.7330142926 38.8399381962 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.7575452122 39.6058463190 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.9074447347 39.7506383769 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.8967233384 30.5573004598 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.4186924041 30.7925389719 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.3550554816 31.7173298465 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3340973772 32.5661389704 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.8793305042 33.1451975000 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.0718020283 34.1077930148 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.3765659597 34.6652275838 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.7130644703 34.6829381126 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.5574458139 35.6024191831 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.7509673047 36.5904991465 expect -11753853.356 6923417.921 @@ -1422,61 +1422,61 @@ accept 80.5212319721 43.4298814980 expect 8945156.756 8415826.102 accept 90.6029060873 44.3367368198 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.2968163089 44.7347899226 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5453757907 45.2325884903 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.7132187645 46.1810408682 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.6036848279 46.5953112427 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.8567165951 47.1100600825 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.2452206431 47.5590007593 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.4264735249 47.6243197261 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.1158223427 47.9911994181 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.2100320112 48.9423016681 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.5621188253 40.3822966969 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.0785389235 40.7397870392 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9453288766 41.0637989828 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.0072837113 41.2595851413 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.3677527689 41.6743754043 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.1116359654 41.9054883189 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2367048985 42.7084205060 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.9662473469 42.7707453425 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.5437449083 43.0239640060 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.4757325990 43.2756199739 expect -11568961.170 9589089.555 @@ -1533,61 +1533,61 @@ accept 80.7661690288 51.9879378395 expect 6957594.499 10145750.592 accept 90.2760527960 52.6279152662 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.4470132582 53.2519801847 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.1282829759 53.4607562483 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.5033443580 53.9989335755 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.6561885293 54.6823982531 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.8127091472 54.7255186711 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.0054753699 55.4459165788 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.8312787949 56.2470115579 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.4614439985 57.0241073917 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.7047485406 57.6022388310 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.1586219943 50.1365490236 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.1490260788 50.5023613434 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9535088204 50.9035428509 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.0803324654 51.7753015653 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.7669273536 52.0799612604 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.3599142098 52.6974765371 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.6940989810 52.7976100393 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.7805542206 53.6394720461 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9951721199 54.3490528856 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.4965032257 55.2735286995 expect -6404341.484 11736182.738 @@ -1644,61 +1644,61 @@ accept 80.0566574740 65.2466871256 expect 4076741.126 11011949.460 accept 90.0598623933 65.7380193724 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.2499385302 65.8274446207 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.0091445253 66.5841928232 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.1938557094 67.3045114589 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.1756983494 67.6825233842 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.0774508004 68.5260112188 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.3642244888 69.0087889372 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.0390197585 69.5064813197 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.9882511230 69.9663419458 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.7855662108 70.7558001565 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.8630282894 60.2684905661 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.8774561096 60.7063957678 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.1639611249 61.1269337981 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.0814548820 61.9063878006 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.0476545160 62.7911475081 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.8276916999 62.8515546512 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.9464541970 63.7277849393 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.6864148265 63.9317823343 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.4184495170 64.2249537529 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.6146334566 64.3967878406 expect -4340586.273 11779220.401 @@ -1755,61 +1755,61 @@ accept 80.5645741906 73.7542661119 expect 2585249.402 11363593.076 accept 90.6177784757 74.6865930919 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.2695381559 74.9397012116 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.3724185381 75.3340827987 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.0440856622 75.6509550283 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.4765915697 75.8794035471 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.8273607225 76.0863350217 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.7446122566 76.4130503173 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.9066279973 77.2046671411 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.7039755420 77.5254695021 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.7301487821 78.3643690894 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.8424303971 70.7640164273 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.3071682617 71.3534426809 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9256766432 72.0788134529 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.4389257633 72.9048071827 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.4466193836 73.7144086150 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.4240513471 74.3140345936 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2324314226 75.1789245938 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.4080456874 75.9740320316 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9624349535 76.7254677659 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.8454838458 77.0914030368 expect -2065538.883 11806583.302 @@ -1866,61 +1866,61 @@ accept 80.6482540792 83.6156947131 expect 994412.198 11647508.801 accept 90.5789951029 84.1124942551 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 100.9443622402 84.2131541284 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 110.5781783058 84.7127066970 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 120.6025664533 85.5661224284 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 130.0976840056 86.3318417998 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 140.6428111911 86.3329325553 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 150.5251209004 86.5841388479 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 160.4225603060 86.8828039057 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 170.2581319411 87.4171568183 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept 180.2641439484 88.1608036446 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -179.8401984185 80.4164439367 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.6918872432 81.0641431423 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.9211815920 81.7949103274 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.6075138921 82.1028453149 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -139.7372920424 82.6385276754 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -129.7998353504 83.1090136759 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -119.2572393635 83.4744235117 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -109.3246360912 84.2608342272 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -99.9601976700 84.4677069243 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -89.7505869053 85.0897168462 expect -774050.983 11808922.435 @@ -1956,166 +1956,166 @@ accept 10.6007672189 89.4603893825 expect 15609.535 11728897.894 accept 20.8972133561 90.3008662748 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.3236847010 90.9360697392 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.5211596030 91.7425546179 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.9530657025 92.7167872262 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.2966089164 93.5518747322 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.7058277145 93.9478756274 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.2842419408 94.5029189079 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.7046514943 94.5870657217 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.5757828394 94.7544968060 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.0784957493 95.6326996288 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.4420696450 95.7426558832 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.0586467430 96.7026620164 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.4982918026 97.2453640881 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.5137836610 97.2825819689 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.8117951323 97.8473653755 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.3402740510 98.3587698302 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.9378053935 98.8743871260 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.1153600127 89.6136396944 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -169.2261536485 89.9072554901 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -159.1164133392 89.9075872145 -expect failure errno -20 +expect failure errno coord_transfm_outside_projection_domain accept -149.3960866375 90.6652890542 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -139.1720109722 91.2726639403 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -129.0729383513 91.6124307897 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -119.9896731679 92.3534538297 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -109.8793121665 92.7446796075 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -99.4084806305 92.8846710223 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -89.0674703286 93.0281709121 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -79.1149414160 93.4632295476 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -69.5261517902 94.2811379653 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -59.0417407292 95.2403005497 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -49.3488539326 95.3977809221 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -39.5548627592 96.1026759897 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -29.0476034815 96.4820442045 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -19.8278954645 96.7461121139 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -9.5488366916 97.4860281314 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 0.2307496667 97.5054708483 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 10.6032378382 97.7247157965 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 20.8959156966 98.0573474237 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.7104889319 98.5114024172 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.1762654017 98.8114138429 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.8420835837 99.5737438963 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.4391516649 99.6023781174 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.3833096116 99.8129052911 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.6796681432 100.7784977140 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.8893235311 100.9639616716 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.8499388037 101.2529844461 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.5488903609 101.9706798836 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.1208651509 102.2817021553 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.1003249085 102.6010355936 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.8624898562 102.6311753718 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.3852952852 103.0749738073 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.7214099599 103.8391207142 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.6439119665 104.6357199780 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.2173889904 105.2754168153 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord ------------------------------------------------------------ ------------------------------------------------------------ diff --git a/test/gie/more_builtins.gie b/test/gie/more_builtins.gie index 41d0ac52..67635642 100644 --- a/test/gie/more_builtins.gie +++ b/test/gie/more_builtins.gie @@ -75,11 +75,11 @@ roundtrip 1 ------------------------------------------------------------------------------- # No arguments operation proj=molodensky a=6378160 rf=298.25 -expect failure errno no_args +expect failure errno invalid_op_missing_arg # Missing arguments operation proj=molodensky a=6378160 rf=298.25 dx=0 -expect failure errno missing_arg +expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- @@ -267,11 +267,11 @@ roundtrip 100 1 nm ------------------------------------------------------------------------------- # Fail on purpose: +grids parameter is mandatory operation proj=vgridshift -expect failure errno no_args +expect failure errno invalid_op_missing_arg # Fail on purpose: open non-existing grid operation proj=vgridshift grids=nonexistinggrid.gtx -expect failure errno failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- @@ -298,11 +298,11 @@ expect 2.250704350387 46.500051597273 ------------------------------------------------------------------------------- # Fail on purpose: open non-existing grid: operation proj=hgridshift grids=@nonexistinggrid.gsb,anothernonexistinggrid.gsb -expect failure errno failed_to_load_grid +expect failure errno invalid_op_file_not_found_or_invalid # Fail on purpose: +grids parameter is mandatory: operation proj=hgridshift -expect failure errno no_args +expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- @@ -434,27 +434,27 @@ expect 3513638.1999 778956.4533 5248216.4535 2008.75 ------------------------------------------------------------------------------- # A rotational term implies an explicit convention to be specified operation proj=helmert rx=1 -expect failure errno missing_arg +expect failure errno invalid_op_missing_arg operation proj=helmert rx=1 convention=foo -expect failure errno invalid_arg +expect failure errno invalid_op_illegal_arg_value operation proj=helmert rx=1 convention=1 -expect failure errno invalid_arg +expect failure errno invalid_op_illegal_arg_value # towgs84 in helmert context should always be position_vector operation proj=helmert towgs84=1,2,3,4,5,6,7 convention=coordinate_frame -expect failure errno invalid_arg +expect failure errno invalid_op_illegal_arg_value # Transpose no longer accepted operation proj=helmert transpose -expect failure errno invalid_arg +expect failure errno invalid_op_illegal_arg_value # Use of 2D Helmert interface with 3D Helmert setup operation +proj=ob_tran +o_proj=helmert +o_lat_p=0 direction inverse accept 0 0 -expect failure errno 22 +expect failure errno no_inverse_op ------------------------------------------------------------------------------- # Molodensky-Badekas from IOGP Guidance 7.2, Transformation from La Canoa to REGVEN @@ -477,7 +477,7 @@ expect 2550138.45 -5749799.87 1054530.82 # Missing convention operation proj=molobadekas -expect failure errno missing_arg +expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- @@ -513,14 +513,14 @@ roundtrip 1 # some less used options ------------------------------------------------------------------------------- operation proj=utm ellps=GRS80 zone=32 to_meter=0 -expect failure errno unit_factor_less_than_0 +expect failure errno invalid_op_illegal_arg_value operation proj=utm ellps=GRS80 zone=32 to_meter=10 accept 12 55 expect 69187.5632 609890.7825 operation proj=utm ellps=GRS80 zone=32 to_meter=1/0 -expect failure errno unit_factor_less_than_0 +expect failure errno invalid_op_illegal_arg_value operation proj=utm ellps=GRS80 zone=32 to_meter=2.0/0.2 accept 12 55 @@ -791,7 +791,7 @@ expect 25 25 25 25 # Test invalid lat_0 operation +proj=aeqd +R=1 +lat_0=91 -expect failure errno lat_larger_than_90 +expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- # cart diff --git a/test/gie/peirce_q.gie b/test/gie/peirce_q.gie index 3706e15a..6e3e5aa8 100644 --- a/test/gie/peirce_q.gie +++ b/test/gie/peirce_q.gie @@ -9,10 +9,10 @@ operation +proj=peirce_q +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 -expect failure errno lat_or_lon_exceed_limit +expect failure errno coord_transfm_invalid_coord accept -169.8486692749 -89.5742075028 -expect failure errno tolerance_condition +expect failure errno coord_transfm_outside_projection_domain accept 0.8029310185 0.0770204080 expect 126271.599 -11800190.331 @@ -1026,159 +1026,159 @@ accept 30.5303411995 89.7622494101 expect 13429.693 -22771.512 accept 40.0593735791 90.6542378643 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.0020623503 91.1469954761 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.8522213793 91.6903429214 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.7535252886 92.4836618501 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.1051275124 92.9389937571 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.4124853570 93.5341249190 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.7024119502 93.5550590372 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.8115837786 93.7909664255 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.6013207533 93.8492870154 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.7349056594 94.3767135242 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.9588399299 94.8671896725 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.0262851842 95.3534968784 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.4280397748 95.5380581127 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.7651411492 95.6370520364 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.0448345846 96.2732937318 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -179.8257499571 89.6174371357 expect -129.372 42538.994 accept -169.2875892301 90.5843674190 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -159.8023916584 91.1545744228 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -149.1639625275 92.0870993705 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -139.8013904331 92.8786158281 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -129.1637359401 92.9919538772 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -119.8393027005 93.1739711428 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -109.3406602631 94.1639584700 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -99.0695417625 95.1551429476 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -89.0610247556 95.6178466298 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -79.4516859556 96.0205106534 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -69.8082104896 96.1879870093 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -59.8296737152 96.7698954045 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -49.8769972300 97.2097042960 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -39.9274760034 97.5295561660 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -29.8470989427 97.6781116960 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -19.4625703588 98.0419802761 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept -9.0210837473 98.0868081244 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 0.9799321756 98.5464017880 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 10.0429624590 98.7459055217 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 20.2792585617 99.0223555196 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 30.0602725080 100.0053623620 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 40.2383571525 100.9390147017 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 50.7977119707 101.0770157329 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 60.1464549470 101.4743886273 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 70.3854313326 101.6912083253 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 80.4259639014 102.1177916319 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 90.8059360471 102.5951916979 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 100.0616865688 102.7748252495 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 110.4583416539 103.6248728355 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 120.9751205255 103.7983620507 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 130.7919815186 104.0148850515 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 140.6325380833 104.1792511999 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 150.5737064232 105.0050682525 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 160.8571448065 105.0125232729 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 170.6832502669 105.0174505020 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 -expect failure errno -14 +expect failure errno coord_transfm_invalid_coord </gie-strict> diff --git a/test/gie/tinshift.gie b/test/gie/tinshift.gie index dff62693..f16c16bb 100644 --- a/test/gie/tinshift.gie +++ b/test/gie/tinshift.gie @@ -8,15 +8,15 @@ Test +proj=tinshift # Missing +file operation +proj=tinshift -expect failure errno no_args +expect failure errno invalid_op_missing_arg # +file doesn't point to an existing file operation +proj=tinshift +file=i_do_not_exist -expect failure errno invalid_arg +expect failure errno invalid_op_file_not_found_or_invalid # Not a JSON file operation +proj=tinshift +file=proj.ini -expect failure errno invalid_arg +expect failure errno invalid_op_file_not_found_or_invalid # Tests on a file without explicit CRS diff --git a/test/unit/gie_self_tests.cpp b/test/unit/gie_self_tests.cpp index f9252137..70e67dcc 100644 --- a/test/unit/gie_self_tests.cpp +++ b/test/unit/gie_self_tests.cpp @@ -48,7 +48,6 @@ TEST(gie, cart_selftest) { PJ_COORD a, b, obs[2]; PJ_COORD coord[2]; - int err; size_t n, sz; double dist, h, t; const char *const args[3] = {"proj=utm", "zone=32", "ellps=GRS80"}; @@ -89,16 +88,6 @@ TEST(gie, cart_selftest) { /* Clear any previous error */ proj_errno_reset(P); - /* Invalid projection */ - a = proj_trans(P, static_cast<PJ_DIRECTION>(42), a); - ASSERT_EQ(a.lpz.lam, HUGE_VAL); - - err = proj_errno(P); - ASSERT_NE(err, 0); - - /* Clear error again */ - proj_errno_reset(P); - /* Clean up */ proj_destroy(P); diff --git a/test/unit/proj_errno_string_test.cpp b/test/unit/proj_errno_string_test.cpp index a592b31f..d58c5e3f 100644 --- a/test/unit/proj_errno_string_test.cpp +++ b/test/unit/proj_errno_string_test.cpp @@ -35,37 +35,26 @@ namespace { -TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(0, proj_errno_string(0)); } +TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(nullptr, proj_errno_string(0)); } TEST(ProjErrnoStringTest, ProjErrnos) { - EXPECT_STREQ("no arguments in initialization list", proj_errno_string(-1)); - EXPECT_STREQ("invalid projection system error (-1000)", - proj_errno_string(-1000)); - EXPECT_STREQ("invalid projection system error (-9999)", - proj_errno_string(-9999)); - // for errnos < -9999, -9999 is always returned - const int min = std::numeric_limits<int>::min(); - EXPECT_STREQ("invalid projection system error (-9999)", - proj_errno_string(min)); - EXPECT_STREQ("invalid projection system error (-9999)", - proj_errno_string(-10000)); + EXPECT_STREQ("Unknown error (code -1)", proj_errno_string(-1)); + EXPECT_STREQ("Invalid PROJ string syntax", + proj_errno_string(PROJ_ERR_INVALID_OP_WRONG_SYNTAX)); + EXPECT_STREQ( + "Unspecified error related to coordinate operation initialization", + proj_errno_string(PROJ_ERR_INVALID_OP)); + EXPECT_STREQ("Unspecified error related to coordinate transformation", + proj_errno_string(PROJ_ERR_COORD_TRANSFM)); } -TEST(ProjErrnoStringTest, SystemErrnos) { - const int max = std::numeric_limits<int>::max(); - -#ifdef HAVE_STRERROR - EXPECT_STREQ(strerror(5), proj_errno_string(5)); - EXPECT_STREQ(strerror(9999), proj_errno_string(9999)); - EXPECT_STREQ(strerror(10000), proj_errno_string(10000)); - EXPECT_STREQ(strerror(max), proj_errno_string(max)); -#else - EXPECT_STREQ("no system list, errno: 5\n", proj_errno_string(5)); - EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(9999)); - // for errnos > 9999, 9999 is always returned - EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(10000)); - EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(max)); -#endif +TEST(ProjErrnoStringTest, proj_context_errno_string) { + EXPECT_STREQ("Unknown error (code -1)", + proj_context_errno_string(nullptr, -1)); + PJ_CONTEXT *ctx = proj_context_create(); + EXPECT_STREQ("Unknown error (code -999)", + proj_context_errno_string(ctx, -999)); + proj_context_destroy(ctx); } } // namespace |
