diff options
| -rw-r--r-- | src/4D_api.cpp | 2 | ||||
| -rw-r--r-- | src/Makefile.am | 3 | ||||
| -rw-r--r-- | src/iso19111/io.cpp | 6 | ||||
| -rw-r--r-- | src/lib_proj.cmake | 2 | ||||
| -rw-r--r-- | test/unit/gie_self_tests.cpp | 4 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 35 |
6 files changed, 46 insertions, 6 deletions
diff --git a/src/4D_api.cpp b/src/4D_api.cpp index 26e9456e..f37594b5 100644 --- a/src/4D_api.cpp +++ b/src/4D_api.cpp @@ -1557,7 +1557,7 @@ PJ_GRID_INFO proj_grid_info(const char *gridname) { memset(&grinfo, 0, sizeof(PJ_GRID_INFO)); /* in case the grid wasn't found */ - if (gridinfo->filename == nullptr) { + if (gridinfo->filename == nullptr || gridinfo->ct == nullptr) { pj_gridinfo_free(ctx, gridinfo); strcpy(grinfo.format, "missing"); return grinfo; diff --git a/src/Makefile.am b/src/Makefile.am index 0a209f9b..2e14d1dd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,7 +11,7 @@ AM_CPPFLAGS = -DPROJ_LIB=\"$(pkgdatadir)\" \ AM_CXXFLAGS = @CXX_WFLAGS@ @FLTO_FLAG@ include_HEADERS = proj.h proj_experimental.h proj_constants.h proj_api.h geodesic.h \ - org_proj4_PJ.h proj_symbol_rename.h proj_json_streaming_writer.hpp + org_proj4_PJ.h proj_symbol_rename.h EXTRA_DIST = bin_cct.cmake bin_gie.cmake bin_cs2cs.cmake \ bin_geod.cmake bin_proj.cmake bin_projinfo.cmake \ @@ -210,6 +210,7 @@ libproj_la_SOURCES = \ wkt2_parser.h wkt2_parser.cpp \ wkt2_generated_parser.h wkt2_generated_parser.c \ \ + proj_json_streaming_writer.hpp \ proj_json_streaming_writer.cpp \ \ tracing.cpp diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index 0d98e2de..2aec5fac 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -8582,7 +8582,11 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS( break; } } - if (getNumericValue(getParamValue(step, "a")) == 6378137) { + if (getNumericValue(getParamValue(step, "a")) == 6378137 && + getAngularValue(getParamValue(step, "lon_0")) == 0.0 && + getAngularValue(getParamValue(step, "lat_0")) == 0.0 && + getAngularValue(getParamValue(step, "x_0")) == 0.0 && + getAngularValue(getParamValue(step, "y_0")) == 0.0) { bWebMercator = true; } } else if (hasParamValue(step, "lat_ts")) { diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index c6a6e111..d1bc8836 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -283,6 +283,7 @@ set(SRC_LIBPROJ_CORE wkt_parser.cpp wkt_parser.hpp zpoly1.cpp + proj_json_streaming_writer.hpp proj_json_streaming_writer.cpp tracing.cpp ${CMAKE_CURRENT_BINARY_DIR}/proj_config.h @@ -293,7 +294,6 @@ set(HEADERS_LIBPROJ proj.h proj_experimental.h proj_constants.h - proj_json_streaming_writer.hpp geodesic.h ) diff --git a/test/unit/gie_self_tests.cpp b/test/unit/gie_self_tests.cpp index 15db814a..a738db75 100644 --- a/test/unit/gie_self_tests.cpp +++ b/test/unit/gie_self_tests.cpp @@ -386,6 +386,10 @@ TEST(gie, info_functions) { grid_info = proj_grid_info("nonexistinggrid"); ASSERT_EQ(std::string(grid_info.filename), ""); + // File exists, but is not a grid + grid_info = proj_grid_info("proj.db"); + ASSERT_EQ(std::string(grid_info.filename), ""); + /* proj_init_info() */ init_info = proj_init_info("unknowninit"); ASSERT_EQ(std::string(init_info.filename), ""); diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 552eb5bf..38dfc2b4 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -8186,9 +8186,10 @@ TEST(io, projparse_merc_variant_B) { // --------------------------------------------------------------------------- TEST(io, projparse_merc_google_mercator) { - auto obj = PROJStringParser().createFromPROJString( + auto projString = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 " - "+k=1 +units=m +nadgrids=@null +type=crs"); + "+k=1 +units=m +nadgrids=@null +no_defs +type=crs"; + auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -8202,6 +8203,36 @@ TEST(io, projparse_merc_google_mercator) { EXPECT_TRUE(wkt.find("DATUM[\"World Geodetic System 1984\"") != std::string::npos) << wkt; + + EXPECT_EQ( + replaceAll(crs->exportToPROJString(PROJStringFormatter::create().get()), + " +wktext", ""), + projString); +} + +// --------------------------------------------------------------------------- + +TEST(io, projparse_merc_not_quite_google_mercator) { + auto projString = + "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=10 +x_0=0 +y_0=0 " + "+k=1 +units=m +nadgrids=@null +no_defs +type=crs"; + auto obj = PROJStringParser().createFromPROJString(projString); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + WKTFormatterNNPtr f(WKTFormatter::create()); + f->simulCurNodeHasId(); + f->setMultiLine(false); + crs->exportToWKT(f.get()); + auto wkt = f->toString(); + EXPECT_TRUE(wkt.find("METHOD[\"Popular Visualisation Pseudo " + "Mercator\",ID[\"EPSG\",1024]") != std::string::npos) + << wkt; + EXPECT_TRUE(wkt.find("DATUM[\"unknown\",") != std::string::npos) << wkt; + + EXPECT_EQ( + replaceAll(crs->exportToPROJString(PROJStringFormatter::create().get()), + " +wktext", ""), + projString); } // --------------------------------------------------------------------------- |
