aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/4D_api.cpp2
-rw-r--r--src/bin_proj.cmake3
-rw-r--r--src/iso19111/operation/coordinateoperationfactory.cpp7
-rw-r--r--src/iso19111/operation/singleoperation.cpp15
-rw-r--r--src/proj.h8
5 files changed, 21 insertions, 14 deletions
diff --git a/src/4D_api.cpp b/src/4D_api.cpp
index 4e575f14..d366aba8 100644
--- a/src/4D_api.cpp
+++ b/src/4D_api.cpp
@@ -1310,7 +1310,7 @@ int proj_trans_bounds(PJ_CONTEXT* context,
double* out_ymin,
double* out_xmax,
double* out_ymax,
- int densify_pts
+ const int densify_pts
) {
*out_xmin = HUGE_VAL;
*out_ymin = HUGE_VAL;
diff --git a/src/bin_proj.cmake b/src/bin_proj.cmake
index 163303f8..2df467af 100644
--- a/src/bin_proj.cmake
+++ b/src/bin_proj.cmake
@@ -43,9 +43,6 @@ if(UNIX)
else()
add_executable(invproj ${PROJ_SRC})
- set_target_properties(invproj
- PROPERTIES
- RUNTIME_OUTPUT_NAME proj)
target_link_libraries(invproj PRIVATE ${PROJ_LIBRARIES})
target_compile_options(invproj PRIVATE ${PROJ_CXX_WARN_FLAGS})
diff --git a/src/iso19111/operation/coordinateoperationfactory.cpp b/src/iso19111/operation/coordinateoperationfactory.cpp
index b59eeb91..e9bd3cfe 100644
--- a/src/iso19111/operation/coordinateoperationfactory.cpp
+++ b/src/iso19111/operation/coordinateoperationfactory.cpp
@@ -4347,6 +4347,9 @@ void CoordinateOperationFactory::Private::createOperationsBoundToGeog(
const bool heightDepthReversal =
((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp));
+ if (convDst == 0)
+ throw InvalidOperation(
+ "Conversion factor of target unit is 0");
const double factor = convSrc / convDst;
auto conv = Conversion::createChangeVerticalUnit(
util::PropertyMap().set(
@@ -4460,6 +4463,8 @@ void CoordinateOperationFactory::Private::createOperationsVertToVert(
const bool heightDepthReversal =
((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp));
+ if (convDst == 0)
+ throw InvalidOperation("Conversion factor of target unit is 0");
const double factor = convSrc / convDst;
if (!equivalentVDatum) {
auto name = buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr());
@@ -4557,6 +4562,8 @@ void CoordinateOperationFactory::Private::createOperationsVertToGeogBallpark(
const bool heightDepthReversal =
((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp));
+ if (convDst == 0)
+ throw InvalidOperation("Conversion factor of target unit is 0");
const double factor = convSrc / convDst;
const auto &sourceCRSExtent = getExtent(sourceCRS);
diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp
index 2f60828e..4dadfa40 100644
--- a/src/iso19111/operation/singleoperation.cpp
+++ b/src/iso19111/operation/singleoperation.cpp
@@ -2118,15 +2118,18 @@ bool SingleOperation::exportToPROJStringGeneric(
}
if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) {
- double convFactor = parameterValueNumericAsSI(
+ const double convFactor = parameterValueNumericAsSI(
EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR);
- auto uom = common::UnitOfMeasure(std::string(), convFactor,
- common::UnitOfMeasure::Type::LINEAR)
- .exportToPROJString();
- auto reverse_uom =
- common::UnitOfMeasure(std::string(), 1.0 / convFactor,
+ const auto uom =
+ common::UnitOfMeasure(std::string(), convFactor,
common::UnitOfMeasure::Type::LINEAR)
.exportToPROJString();
+ const auto reverse_uom =
+ convFactor == 0.0
+ ? std::string()
+ : common::UnitOfMeasure(std::string(), 1.0 / convFactor,
+ common::UnitOfMeasure::Type::LINEAR)
+ .exportToPROJString();
if (uom == "m") {
// do nothing
} else if (!uom.empty()) {
diff --git a/src/proj.h b/src/proj.h
index b378cd00..92515131 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -604,10 +604,10 @@ int PROJ_DLL proj_trans_bounds(
PJ_CONTEXT* context,
PJ *P,
PJ_DIRECTION direction,
- const double xmin,
- const double ymin,
- const double xmax,
- const double ymax,
+ double xmin,
+ double ymin,
+ double xmax,
+ double ymax,
double* out_xmin,
double* out_ymin,
double* out_xmax,