aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/4D_api.cpp2
-rw-r--r--src/Makefile.am3
-rw-r--r--src/iso19111/io.cpp6
-rw-r--r--src/lib_proj.cmake2
-rw-r--r--test/unit/gie_self_tests.cpp4
-rw-r--r--test/unit/test_io.cpp35
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);
}
// ---------------------------------------------------------------------------