aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/datum.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-08-08 20:04:20 +0200
committerEven Rouault <even.rouault@spatialys.com>2019-08-09 13:22:25 +0200
commit89f2cc7ec4178a369e73e9cd115a2552a55d870a (patch)
treeb5a96d4248a0bb866477ed3c865fdb5648dc0a06 /src/iso19111/datum.cpp
parentec49c9cd0aa9de24623920b8de226daf05a0e90f (diff)
downloadPROJ-89f2cc7ec4178a369e73e9cd115a2552a55d870a.tar.gz
PROJ-89f2cc7ec4178a369e73e9cd115a2552a55d870a.zip
PROJJSON export: use more compact form
Diffstat (limited to 'src/iso19111/datum.cpp')
-rw-r--r--src/iso19111/datum.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp
index 89ecc755..2944da1e 100644
--- a/src/iso19111/datum.cpp
+++ b/src/iso19111/datum.cpp
@@ -376,12 +376,13 @@ void PrimeMeridian::_exportToJSON(
const auto &l_long = longitude();
writer.AddObjKey("longitude");
- {
+ const auto &unit = l_long.unit();
+ if (unit == common::UnitOfMeasure::DEGREE) {
+ writer.Add(l_long.value(), 15);
+ } else {
auto longitudeContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("value");
writer.Add(l_long.value(), 15);
-
- const auto &unit = l_long.unit();
writer.AddObjKey("unit");
unit._exportToJSON(formatter);
}
@@ -834,7 +835,9 @@ void Ellipsoid::_exportToJSON(
const auto &semiMajor = semiMajorAxis();
const auto &semiMajorUnit = semiMajor.unit();
writer.AddObjKey(isSphere() ? "radius" : "semi_major_axis");
- {
+ if (semiMajorUnit == common::UnitOfMeasure::METRE) {
+ writer.Add(semiMajor.value(), 15);
+ } else {
auto objContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("value");
writer.Add(semiMajor.value(), 15);
@@ -850,13 +853,17 @@ void Ellipsoid::_exportToJSON(
writer.Add(l_inverseFlattening->getSIValue(), 15);
} else {
writer.AddObjKey("semi_minor_axis");
- {
+ const auto &l_semiMinorAxis(semiMinorAxis());
+ const auto &semiMinorAxisUnit(l_semiMinorAxis->unit());
+ if (semiMinorAxisUnit == common::UnitOfMeasure::METRE) {
+ writer.Add(l_semiMinorAxis->value(), 15);
+ } else {
auto objContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("value");
- writer.Add(semiMinorAxis()->value(), 15);
+ writer.Add(l_semiMinorAxis->value(), 15);
writer.AddObjKey("unit");
- semiMinorAxis()->unit()._exportToJSON(formatter);
+ semiMinorAxisUnit._exportToJSON(formatter);
}
}
}
@@ -1272,10 +1279,15 @@ void GeodeticReferenceFrame::_exportToJSON(
Datum::getPrivate()->exportAnchorDefinition(formatter);
writer.AddObjKey("ellipsoid");
+ formatter->setOmitTypeInImmediateChild();
ellipsoid()->_exportToJSON(formatter);
- writer.AddObjKey("prime_meridian");
- primeMeridian()->_exportToJSON(formatter);
+ const auto &l_primeMeridian(primeMeridian());
+ if (l_primeMeridian->nameStr() != "Greenwich") {
+ writer.AddObjKey("prime_meridian");
+ formatter->setOmitTypeInImmediateChild();
+ primeMeridian()->_exportToJSON(formatter);
+ }
ObjectUsage::baseExportToJSON(formatter);
}