diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2019-04-02 09:59:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-04-02 09:59:37 +0200 |
| commit | b8a62522b0eca6b4b806471cdff984a28ea1c8fe (patch) | |
| tree | 57fa6179be8677826ac4c5ca31e6f4760245345d | |
| parent | f2842ae44c6294b096f8629bd65e0223f0aa145e (diff) | |
| parent | 47dd4dbc40cbba140f4ceb775ea5d5d628fba961 (diff) | |
| download | PROJ-b8a62522b0eca6b4b806471cdff984a28ea1c8fe.tar.gz PROJ-b8a62522b0eca6b4b806471cdff984a28ea1c8fe.zip | |
Merge pull request #1391 from kbevers/noop
Add no-op operation. It does nothing.
| -rw-r--r-- | docs/source/operations/conversions/index.rst | 1 | ||||
| -rw-r--r-- | docs/source/operations/conversions/noop.rst | 28 | ||||
| -rw-r--r-- | src/Makefile.am | 1 | ||||
| -rw-r--r-- | src/conversions/noop.cpp | 19 | ||||
| -rw-r--r-- | src/iso19111/c_api.cpp | 3 | ||||
| -rw-r--r-- | src/iso19111/io.cpp | 5 | ||||
| -rw-r--r-- | src/lib_proj.cmake | 1 | ||||
| -rw-r--r-- | src/pj_list.h | 1 | ||||
| -rw-r--r-- | test/cli/testprojinfo_out.dist | 4 | ||||
| -rw-r--r-- | test/gie/more_builtins.gie | 17 | ||||
| -rw-r--r-- | test/unit/test_datum.cpp | 4 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 12 | ||||
| -rw-r--r-- | test/unit/test_operation.cpp | 20 |
13 files changed, 94 insertions, 22 deletions
diff --git a/docs/source/operations/conversions/index.rst b/docs/source/operations/conversions/index.rst index a9d137ab..42ad079d 100644 --- a/docs/source/operations/conversions/index.rst +++ b/docs/source/operations/conversions/index.rst @@ -15,6 +15,7 @@ conversions. cart geoc latlon + noop pop push unitconvert diff --git a/docs/source/operations/conversions/noop.rst b/docs/source/operations/conversions/noop.rst new file mode 100644 index 00000000..a35b2b58 --- /dev/null +++ b/docs/source/operations/conversions/noop.rst @@ -0,0 +1,28 @@ +.. _noop: + +================================================================================ +No operation +================================================================================ + +.. versionadded:: 6.1.0 + +Pass a coordinate through unchanged. + ++---------------------+--------------------------------------------------------+ +| **Alias** | noop | ++---------------------+--------------------------------------------------------+ +| **Domain** | 4D | ++---------------------+--------------------------------------------------------+ +| **Input type** | Any | ++---------------------+--------------------------------------------------------+ +| **Output type** | Any | ++---------------------+--------------------------------------------------------+ + +The no operation is a dummy operation that returns whatever is passed to it +as seen in this example:: + + $ echo 12 34 56 78 | cct +proj=noop + 12.0000 34.0000 56.0000 78.0000 + +The operation has no options and default options will not affect the output. + diff --git a/src/Makefile.am b/src/Makefile.am index b62a11b0..9858d78f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -173,6 +173,7 @@ libproj_la_SOURCES = \ conversions/cart.cpp \ conversions/geoc.cpp \ conversions/geocent.cpp \ + conversions/noop.cpp \ conversions/unitconvert.cpp \ \ transformations/affine.cpp \ diff --git a/src/conversions/noop.cpp b/src/conversions/noop.cpp new file mode 100644 index 00000000..a5dd6023 --- /dev/null +++ b/src/conversions/noop.cpp @@ -0,0 +1,19 @@ +#define PJ_LIB__ + +#include "proj_internal.h" + +PROJ_HEAD(noop, "No operation"); + +static PJ_COORD noop(PJ_COORD coord, PJ *P) { + (void) P; + return coord; +} + +PJ *CONVERSION(noop, 0) { + P->fwd4d = noop; + P->inv4d = noop; + P->left = PJ_IO_UNITS_WHATEVER; + P->right = PJ_IO_UNITS_WHATEVER; + return P; +} + diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 1f4cecde..b15b8e34 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -134,8 +134,7 @@ static PJ *pj_obj_create(PJ_CONTEXT *ctx, const IdentifiedObjectNNPtr &objIn) { auto formatter = PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext); auto projString = coordop->exportToPROJString(formatter.get()); - auto pj = pj_create_internal( - ctx, projString.empty() ? "+proj=affine" : projString.c_str()); + auto pj = pj_create_internal(ctx, projString.c_str()); if (pj) { pj->iso_obj = objIn; return pj; diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index 03fb6977..51fda1c1 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -5342,6 +5342,11 @@ const std::string &PROJStringFormatter::toString() const { } } } + + if (d->result_.empty()) { + d->appendToResult("+proj=noop"); + } + return d->result_; } diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index 72a8cc59..38bc05d8 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -174,6 +174,7 @@ set(SRC_LIBPROJ_CONVERSIONS conversions/cart.cpp conversions/geoc.cpp conversions/geocent.cpp + conversions/noop.cpp conversions/unitconvert.cpp ) diff --git a/src/pj_list.h b/src/pj_list.h index 8ab4cdc0..0923bba8 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -106,6 +106,7 @@ PROJ_HEAD(nell_h, "Nell-Hammer") PROJ_HEAD(nicol, "Nicolosi Globular") PROJ_HEAD(nsper, "Near-sided perspective") PROJ_HEAD(nzmg, "New Zealand Map Grid") +PROJ_HEAD(noop, "No operation") PROJ_HEAD(ob_tran, "General Oblique Transformation") PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") PROJ_HEAD(oea, "Oblated Equal Area") diff --git a/test/cli/testprojinfo_out.dist b/test/cli/testprojinfo_out.dist index 8698d6c1..f5cbb8bf 100644 --- a/test/cli/testprojinfo_out.dist +++ b/test/cli/testprojinfo_out.dist @@ -175,7 +175,7 @@ Operation n°1: unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation PROJ string: - ++proj=noop WKT2_2018 string: COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83", @@ -540,7 +540,7 @@ Operation n°7: unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation PROJ string: - ++proj=noop WKT2_2018 string: COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83", diff --git a/test/gie/more_builtins.gie b/test/gie/more_builtins.gie index e16443d4..f6b52ea3 100644 --- a/test/gie/more_builtins.gie +++ b/test/gie/more_builtins.gie @@ -756,4 +756,21 @@ expect 359 10 0 ------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +# No-op +------------------------------------------------------------------------------- +operation +proj=noop +direction forward +accept 25 25 +expect 25 25 + +accept 25 25 25 +expect 25 25 25 + +accept 25 25 25 25 +expect 25 25 25 25 +------------------------------------------------------------------------------- + + + </gie> diff --git a/test/unit/test_datum.cpp b/test/unit/test_datum.cpp index 23c14f67..fa53ff85 100644 --- a/test/unit/test_datum.cpp +++ b/test/unit/test_datum.cpp @@ -175,7 +175,7 @@ TEST(datum, prime_meridian_to_PROJString) { EXPECT_EQ(PrimeMeridian::GREENWICH->exportToPROJString( PROJStringFormatter::create().get()), - ""); + "+proj=noop"); EXPECT_EQ(PrimeMeridian::PARIS->exportToPROJString( PROJStringFormatter::create().get()), @@ -195,7 +195,7 @@ TEST(datum, prime_meridian_to_PROJString) { PropertyMap().set(IdentifiedObject::NAME_KEY, "Origin meridian"), Angle(0)) ->exportToPROJString(PROJStringFormatter::create().get()), - ""); + "+proj=noop"); EXPECT_TRUE(PrimeMeridian::GREENWICH->isEquivalentTo( PrimeMeridian::GREENWICH.get())); diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 17b3c334..edf987ba 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -6541,7 +6541,7 @@ TEST(io, projstringformatter_helmert_3_param_noop) { fmt->addParam("x", 0); fmt->addParam("y", 0); fmt->addParam("z", 0); - EXPECT_EQ(fmt->toString(), ""); + EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- @@ -6557,7 +6557,7 @@ TEST(io, projstringformatter_helmert_7_param_noop) { fmt->addParam("rz", 0); fmt->addParam("s", 0); fmt->addParam("convention", "position_vector"); - EXPECT_EQ(fmt->toString(), ""); + EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- @@ -6587,7 +6587,7 @@ TEST(io, projstringformatter_merge_consecutive_helmert_3_param_noop) { fmt->addParam("x", -10); fmt->addParam("y", -20); fmt->addParam("z", -30); - EXPECT_EQ(fmt->toString(), ""); + EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- @@ -6599,7 +6599,7 @@ TEST(io, projstringformatter_cart_grs80_wgs84) { fmt->addStep("cart"); fmt->setCurrentStepInverted(true); fmt->addParam("ellps", "GRS80"); - EXPECT_EQ(fmt->toString(), ""); + EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- @@ -7334,7 +7334,7 @@ TEST(io, projparse_longlat_axis_neu) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); - EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), ""); + EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- @@ -7437,7 +7437,7 @@ TEST(io, projparse_longlat_axisswap) { EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), (atoi(order1) == 2 && atoi(order2) == 1) - ? "" + ? "+proj=noop" : "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=axisswap +order=" + std::string(order1) + "," + order2); diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp index 32acbf22..c4cafef6 100644 --- a/test/unit/test_operation.cpp +++ b/test/unit/test_operation.cpp @@ -636,7 +636,7 @@ TEST(operation, transformation_createGeocentricTranslations_null) { EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), - ""); + "+proj=noop"); } // --------------------------------------------------------------------------- @@ -956,7 +956,7 @@ TEST(operation, transformation_successive_helmert_noop) { std::vector<PositionalAccuracyNNPtr>{}); EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()), - ""); + "+proj=noop"); } // --------------------------------------------------------------------------- @@ -4131,7 +4131,7 @@ TEST(operation, PROJ_based_empty) { SingleOperation::createPROJBased(PropertyMap(), "", nullptr, nullptr); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), - ""); + "+proj=noop"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"PROJ-based coordinate operation\",\n" @@ -4144,7 +4144,7 @@ TEST(operation, PROJ_based_empty) { EXPECT_EQ(conv->inverse()->exportToPROJString( PROJStringFormatter::create().get()), - ""); + "+proj=noop"); } // --------------------------------------------------------------------------- @@ -4328,7 +4328,7 @@ TEST(operation, geogCRS_to_geogCRS_context_filter_bbox) { ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), - ""); + "+proj=noop"); } } @@ -4344,7 +4344,7 @@ TEST(operation, geogCRS_to_geogCRS_context_incompatible_area) { ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), - ""); + "+proj=noop"); } // --------------------------------------------------------------------------- @@ -4504,7 +4504,7 @@ TEST(operation, geogCRS_to_geogCRS_noop) { GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Null geographic offset from WGS 84 to WGS 84"); - EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), ""); + EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(op->inverse()->nameStr(), op->nameStr()); } @@ -4651,7 +4651,7 @@ TEST(operation, geogCRS_to_geogCRS_CH1903_to_CH1903plus_context) { EXPECT_EQ(list[0]->nameStr(), "CH1903 to ETRS89 (1) + Inverse of CH1903+ to ETRS89 (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), - ""); + "+proj=noop"); EXPECT_EQ(list[1]->nameStr(), "CH1903 to CH1903+ (1)"); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), @@ -4845,7 +4845,7 @@ TEST(operation, geocentricCRS_to_geocentricCRS_noop) { ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Ballpark geocentric translation from WGS 84 to WGS 84"); - EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), ""); + EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(op->inverse()->nameStr(), op->nameStr()); } @@ -6571,7 +6571,7 @@ TEST(operation, compoundCRS_to_geogCRS_3D_context) { PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), - ""); + "+proj=noop"); } } |
