diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-12-14 15:39:54 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-12-14 15:39:54 +0100 |
| commit | 1762d1c93c77415e737cbcded2371ad5e22df751 (patch) | |
| tree | 16b4c3190650cd8e287efeeb664cf1dd037e3aad /src | |
| parent | ba313759523d6d24f7e027f5ddae230656141b3b (diff) | |
| download | PROJ-1762d1c93c77415e737cbcded2371ad5e22df751.tar.gz PROJ-1762d1c93c77415e737cbcded2371ad5e22df751.zip | |
proj_obj_crs_alter_cs_XXX: add new parameters to set unit id
Diffstat (limited to 'src')
| -rw-r--r-- | src/c_api.cpp | 55 | ||||
| -rw-r--r-- | src/proj_experimental.h | 17 |
2 files changed, 48 insertions, 24 deletions
diff --git a/src/c_api.cpp b/src/c_api.cpp index aa9d7e70..d4e5c5db 100644 --- a/src/c_api.cpp +++ b/src/c_api.cpp @@ -2019,21 +2019,30 @@ static PropertyMap createPropertyMapName(const char *c_name) { // --------------------------------------------------------------------------- -static UnitOfMeasure createLinearUnit(const char *name, double convFactor) { +static UnitOfMeasure createLinearUnit(const char *name, double convFactor, + const char *unit_auth_name = nullptr, + const char *unit_code = nullptr) { return name == nullptr ? UnitOfMeasure::METRE - : UnitOfMeasure(name, convFactor, UnitOfMeasure::Type::LINEAR); + : UnitOfMeasure(name, convFactor, UnitOfMeasure::Type::LINEAR, + unit_auth_name ? unit_auth_name : "", + unit_code ? unit_code : ""); } // --------------------------------------------------------------------------- -static UnitOfMeasure createAngularUnit(const char *name, double convFactor) { +static UnitOfMeasure createAngularUnit(const char *name, double convFactor, + const char *unit_auth_name = nullptr, + const char *unit_code = nullptr) { return name ? (ci_equal(name, "degree") ? UnitOfMeasure::DEGREE : ci_equal(name, "grad") ? UnitOfMeasure::GRAD : UnitOfMeasure(name, convFactor, - UnitOfMeasure::Type::ANGULAR)) + UnitOfMeasure::Type::ANGULAR, + unit_auth_name ? unit_auth_name + : "", + unit_code ? unit_code : "")) : UnitOfMeasure::DEGREE; } @@ -2506,15 +2515,18 @@ PJ_OBJ *proj_obj_crs_alter_geodetic_crs(PJ_CONTEXT *ctx, const PJ_OBJ *obj, * @param obj Object of type CRS. Must not be NULL * @param angular_units Name of the angular units. Or NULL for Degree * @param angular_units_conv Conversion factor from the angular unit to radian. - * Or - * 0 for Degree if angular_units == NULL. Otherwise should be not NULL + * Or 0 for Degree if angular_units == NULL. Otherwise should be not NULL + * @param unit_auth_name Unit authority name. Or NULL. + * @param unit_code Unit code. Or NULL. * * @return Object that must be unreferenced with * proj_obj_destroy(), or NULL in case of error. */ PJ_OBJ *proj_obj_crs_alter_cs_angular_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, const char *angular_units, - double angular_units_conv) { + double angular_units_conv, + const char *unit_auth_name, + const char *unit_code) { SANITIZE_CTX(ctx); auto geodCRS = proj_obj_crs_get_geodetic_crs(ctx, obj); @@ -2529,8 +2541,8 @@ PJ_OBJ *proj_obj_crs_alter_cs_angular_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, PJ_OBJ *geogCRSAltered = nullptr; try { - const UnitOfMeasure angUnit( - createAngularUnit(angular_units, angular_units_conv)); + const UnitOfMeasure angUnit(createAngularUnit( + angular_units, angular_units_conv, unit_auth_name, unit_code)); geogCRSAltered = PJ_OBJ::create(GeographicCRS::create( createPropertyMapName(proj_obj_get_name(geodCRS)), geogCRS->datum(), geogCRS->datumEnsemble(), @@ -2563,13 +2575,17 @@ PJ_OBJ *proj_obj_crs_alter_cs_angular_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL + * @param unit_auth_name Unit authority name. Or NULL. + * @param unit_code Unit code. Or NULL. * * @return Object that must be unreferenced with * proj_obj_destroy(), or NULL in case of error. */ PJ_OBJ *proj_obj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, const char *linear_units, - double linear_units_conv) { + double linear_units_conv, + const char *unit_auth_name, + const char *unit_code) { SANITIZE_CTX(ctx); auto crs = dynamic_cast<const CRS *>(obj->obj.get()); if (!crs) { @@ -2577,8 +2593,8 @@ PJ_OBJ *proj_obj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, } try { - const UnitOfMeasure linearUnit( - createLinearUnit(linear_units, linear_units_conv)); + const UnitOfMeasure linearUnit(createLinearUnit( + linear_units, linear_units_conv, unit_auth_name, unit_code)); return PJ_OBJ::create(crs->alterCSLinearUnit(linearUnit)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); @@ -2602,6 +2618,8 @@ PJ_OBJ *proj_obj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL + * @param unit_auth_name Unit authority name. Or NULL. + * @param unit_code Unit code. Or NULL. * @param convert_to_new_unit TRUE if exisiting values should be converted from * their current unit to the new unit. If FALSE, their value will be left * unchanged and the unit overriden (so the resulting CRS will not be @@ -2610,11 +2628,10 @@ PJ_OBJ *proj_obj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ_OBJ *obj, * @return Object that must be unreferenced with * proj_obj_destroy(), or NULL in case of error. */ -PJ_OBJ *proj_obj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, - const PJ_OBJ *obj, - const char *linear_units, - double linear_units_conv, - int convert_to_new_unit) { +PJ_OBJ *proj_obj_crs_alter_parameters_linear_unit( + PJ_CONTEXT *ctx, const PJ_OBJ *obj, const char *linear_units, + double linear_units_conv, const char *unit_auth_name, const char *unit_code, + int convert_to_new_unit) { SANITIZE_CTX(ctx); auto crs = dynamic_cast<const ProjectedCRS *>(obj->obj.get()); if (!crs) { @@ -2622,8 +2639,8 @@ PJ_OBJ *proj_obj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, } try { - const UnitOfMeasure linearUnit( - createLinearUnit(linear_units, linear_units_conv)); + const UnitOfMeasure linearUnit(createLinearUnit( + linear_units, linear_units_conv, unit_auth_name, unit_code)); return PJ_OBJ::create(crs->alterParametersLinearUnit( linearUnit, convert_to_new_unit == TRUE)); } catch (const std::exception &e) { diff --git a/src/proj_experimental.h b/src/proj_experimental.h index f3f5c529..9c72dbfe 100644 --- a/src/proj_experimental.h +++ b/src/proj_experimental.h @@ -189,17 +189,24 @@ PJ_OBJ PROJ_DLL *proj_obj_crs_alter_geodetic_crs(PJ_CONTEXT *ctx, PJ_OBJ PROJ_DLL *proj_obj_crs_alter_cs_angular_unit(PJ_CONTEXT *ctx, const PJ_OBJ* obj, const char *angular_units, - double angular_units_conv); + double angular_units_conv, + const char *unit_auth_name, + const char *unit_code); PJ_OBJ PROJ_DLL *proj_obj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ_OBJ* obj, - const char *linear_units, - double linear_units_conv); + const char *linear_units, + double linear_units_conv, + const char *unit_auth_name, + const char *unit_code); -PJ_OBJ PROJ_DLL *proj_obj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, - const PJ_OBJ* obj, +PJ_OBJ PROJ_DLL *proj_obj_crs_alter_parameters_linear_unit( + PJ_CONTEXT *ctx, + const PJ_OBJ* obj, const char *linear_units, double linear_units_conv, + const char *unit_auth_name, + const char *unit_code, int convert_to_new_unit); PJ_OBJ PROJ_DLL *proj_obj_create_engineering_crs(PJ_CONTEXT *ctx, |
