diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-01-02 13:28:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-02 13:28:57 +0100 |
| commit | 1f8073ac6c82868e813a8ec8d05e403050e33c5e (patch) | |
| tree | db349195de4915f06a05e6133ecb5990732bea11 | |
| parent | 2da4b6f5027938cc1d3331351455bfdeabd40ad3 (diff) | |
| parent | ea311993551f0019f38de361a5bc47fc630ee871 (diff) | |
| download | PROJ-1f8073ac6c82868e813a8ec8d05e403050e33c5e.tar.gz PROJ-1f8073ac6c82868e813a8ec8d05e403050e33c5e.zip | |
Merge pull request #1820 from snowman2/cs_projjson
fix exporting CoordinateSystem to PROJ JSON with ID
| -rw-r--r-- | src/iso19111/coordinatesystem.cpp | 12 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 38 |
2 files changed, 45 insertions, 5 deletions
diff --git a/src/iso19111/coordinatesystem.cpp b/src/iso19111/coordinatesystem.cpp index 163f0f43..fc4b7492 100644 --- a/src/iso19111/coordinatesystem.cpp +++ b/src/iso19111/coordinatesystem.cpp @@ -581,11 +581,13 @@ void CoordinateSystem::_exportToJSON( writer.Add(getWKT2Type(true)); writer.AddObjKey("axis"); - auto axisContext(writer.MakeArrayContext(false)); - const auto &l_axisList = axisList(); - for (auto &axis : l_axisList) { - formatter->setOmitTypeInImmediateChild(); - axis->_exportToJSON(formatter); + { + auto axisContext(writer.MakeArrayContext(false)); + const auto &l_axisList = axisList(); + for (auto &axis : l_axisList) { + formatter->setOmitTypeInImmediateChild(); + axis->_exportToJSON(formatter); + } } if (formatter->outputId()) { diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 4242a15c..05ec01e3 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -11915,3 +11915,41 @@ TEST(json_import, multiple_ids) { EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } + +// --------------------------------------------------------------------------- + +TEST(json_export, coordinate_system_id) { + auto json = "{\n" + " \"$schema\": \"foo\",\n" + " \"type\": \"CoordinateSystem\",\n" + " \"subtype\": \"ellipsoidal\",\n" + " \"axis\": [\n" + " {\n" + " \"name\": \"Geodetic latitude\",\n" + " \"abbreviation\": \"Lat\",\n" + " \"direction\": \"north\",\n" + " \"unit\": \"degree\"\n" + " },\n" + " {\n" + " \"name\": \"Geodetic longitude\",\n" + " \"abbreviation\": \"Lon\",\n" + " \"direction\": \"east\",\n" + " \"unit\": \"degree\"\n" + " }\n" + " ],\n" + " \"id\": {\n" + " \"authority\": \"EPSG\",\n" + " \"code\": 6422\n" + " }\n" + "}"; + + auto dbContext = DatabaseContext::create(); + auto obj = createFromUserInput("EPSG:4326", dbContext); + auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); + ASSERT_TRUE(crs != nullptr); + auto cs = crs->coordinateSystem(); + ASSERT_TRUE(cs != nullptr); + EXPECT_EQ( + cs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), + json); +} |
