aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/datum.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-04-23 19:15:22 +0200
committerGitHub <noreply@github.com>2020-04-23 19:15:22 +0200
commitb0e5448982b4e12db9a664ac96089a14375cb55d (patch)
tree7875e6eb0d25185d23f06b02c56b9e827d0a6825 /src/iso19111/datum.cpp
parentf5f0efe5eb6b76cfe0498835da268c2492f3fe58 (diff)
downloadPROJ-b0e5448982b4e12db9a664ac96089a14375cb55d.tar.gz
PROJ-b0e5448982b4e12db9a664ac96089a14375cb55d.zip
io.hpp: avoid dependency to proj_json_streaming_writer.hpp (fixes #2182) (#2183)
Diffstat (limited to 'src/iso19111/datum.cpp')
-rw-r--r--src/iso19111/datum.cpp144
1 files changed, 73 insertions, 71 deletions
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp
index 337b74a8..03abb0d7 100644
--- a/src/iso19111/datum.cpp
+++ b/src/iso19111/datum.cpp
@@ -46,6 +46,8 @@
#include "proj_api.h"
// clang-format on
+#include "proj_json_streaming_writer.hpp"
+
#include <cmath>
#include <cstdlib>
#include <memory>
@@ -113,9 +115,9 @@ void Datum::Private::exportAnchorDefinition(io::WKTFormatter *formatter) const {
void Datum::Private::exportAnchorDefinition(
io::JSONFormatter *formatter) const {
if (anchorDefinition) {
- auto &writer = formatter->writer();
- writer.AddObjKey("anchor");
- writer.Add(*anchorDefinition);
+ auto writer = formatter->writer();
+ writer->AddObjKey("anchor");
+ writer->Add(*anchorDefinition);
}
}
@@ -381,25 +383,25 @@ void PrimeMeridian::_exportToWKT(
void PrimeMeridian::_exportToJSON(
io::JSONFormatter *formatter) const // throw(FormattingException)
{
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("PrimeMeridian", !identifiers().empty()));
- writer.AddObjKey("name");
+ writer->AddObjKey("name");
std::string l_name =
name()->description().has_value() ? nameStr() : "Greenwich";
- writer.Add(l_name);
+ writer->Add(l_name);
const auto &l_long = longitude();
- writer.AddObjKey("longitude");
+ writer->AddObjKey("longitude");
const auto &unit = l_long.unit();
if (unit == common::UnitOfMeasure::DEGREE) {
- writer.Add(l_long.value(), 15);
+ writer->Add(l_long.value(), 15);
} else {
auto longitudeContext(formatter->MakeObjectContext(nullptr, false));
- writer.AddObjKey("value");
- writer.Add(l_long.value(), 15);
- writer.AddObjKey("unit");
+ writer->AddObjKey("value");
+ writer->Add(l_long.value(), 15);
+ writer->AddObjKey("unit");
unit._exportToJSON(formatter);
}
@@ -836,49 +838,49 @@ void Ellipsoid::_exportToWKT(
void Ellipsoid::_exportToJSON(
io::JSONFormatter *formatter) const // throw(FormattingException)
{
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("Ellipsoid", !identifiers().empty()));
- writer.AddObjKey("name");
+ writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
- writer.Add("unnamed");
+ writer->Add("unnamed");
} else {
- writer.Add(l_name);
+ writer->Add(l_name);
}
const auto &semiMajor = semiMajorAxis();
const auto &semiMajorUnit = semiMajor.unit();
- writer.AddObjKey(isSphere() ? "radius" : "semi_major_axis");
+ writer->AddObjKey(isSphere() ? "radius" : "semi_major_axis");
if (semiMajorUnit == common::UnitOfMeasure::METRE) {
- writer.Add(semiMajor.value(), 15);
+ writer->Add(semiMajor.value(), 15);
} else {
auto objContext(formatter->MakeObjectContext(nullptr, false));
- writer.AddObjKey("value");
- writer.Add(semiMajor.value(), 15);
+ writer->AddObjKey("value");
+ writer->Add(semiMajor.value(), 15);
- writer.AddObjKey("unit");
+ writer->AddObjKey("unit");
semiMajorUnit._exportToJSON(formatter);
}
if (!isSphere()) {
const auto &l_inverseFlattening = inverseFlattening();
if (l_inverseFlattening.has_value()) {
- writer.AddObjKey("inverse_flattening");
- writer.Add(l_inverseFlattening->getSIValue(), 15);
+ writer->AddObjKey("inverse_flattening");
+ writer->Add(l_inverseFlattening->getSIValue(), 15);
} else {
- writer.AddObjKey("semi_minor_axis");
+ 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);
+ writer->Add(l_semiMinorAxis->value(), 15);
} else {
auto objContext(formatter->MakeObjectContext(nullptr, false));
- writer.AddObjKey("value");
- writer.Add(l_semiMinorAxis->value(), 15);
+ writer->AddObjKey("value");
+ writer->Add(l_semiMinorAxis->value(), 15);
- writer.AddObjKey("unit");
+ writer->AddObjKey("unit");
semiMinorAxisUnit._exportToJSON(formatter);
}
}
@@ -1312,36 +1314,36 @@ void GeodeticReferenceFrame::_exportToJSON(
auto objectContext(formatter->MakeObjectContext(
dynamicGRF ? "DynamicGeodeticReferenceFrame" : "GeodeticReferenceFrame",
!identifiers().empty()));
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
- writer.AddObjKey("name");
+ writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
- writer.Add("unnamed");
+ writer->Add("unnamed");
} else {
- writer.Add(l_name);
+ writer->Add(l_name);
}
Datum::getPrivate()->exportAnchorDefinition(formatter);
if (dynamicGRF) {
- writer.AddObjKey("frame_reference_epoch");
- writer.Add(dynamicGRF->frameReferenceEpoch().value());
+ writer->AddObjKey("frame_reference_epoch");
+ writer->Add(dynamicGRF->frameReferenceEpoch().value());
const auto &deformationModel = dynamicGRF->deformationModelName();
if (deformationModel.has_value()) {
- writer.AddObjKey("deformation_model");
- writer.Add(*deformationModel);
+ writer->AddObjKey("deformation_model");
+ writer->Add(*deformationModel);
}
}
- writer.AddObjKey("ellipsoid");
+ writer->AddObjKey("ellipsoid");
formatter->setOmitTypeInImmediateChild();
ellipsoid()->_exportToJSON(formatter);
const auto &l_primeMeridian(primeMeridian());
if (l_primeMeridian->nameStr() != "Greenwich") {
- writer.AddObjKey("prime_meridian");
+ writer->AddObjKey("prime_meridian");
formatter->setOmitTypeInImmediateChild();
primeMeridian()->_exportToJSON(formatter);
}
@@ -1668,28 +1670,28 @@ void DatumEnsemble::_exportToJSON(
{
auto objectContext(
formatter->MakeObjectContext("DatumEnsemble", !identifiers().empty()));
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
- writer.AddObjKey("name");
+ writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
- writer.Add("unnamed");
+ writer->Add("unnamed");
} else {
- writer.Add(l_name);
+ writer->Add(l_name);
}
auto l_datums = datums();
- writer.AddObjKey("members");
+ writer->AddObjKey("members");
{
- auto membersContext(writer.MakeArrayContext(false));
+ auto membersContext(writer->MakeArrayContext(false));
for (const auto &datum : l_datums) {
- auto memberContext(writer.MakeObjectContext());
- writer.AddObjKey("name");
+ auto memberContext(writer->MakeObjectContext());
+ writer->AddObjKey("name");
const auto &l_datum_name = datum->nameStr();
if (!l_datum_name.empty()) {
- writer.Add(l_datum_name);
+ writer->Add(l_datum_name);
} else {
- writer.Add("unnamed");
+ writer->Add("unnamed");
}
datum->formatID(formatter);
}
@@ -1698,13 +1700,13 @@ void DatumEnsemble::_exportToJSON(
auto grfFirst = std::dynamic_pointer_cast<GeodeticReferenceFrame>(
l_datums[0].as_nullable());
if (grfFirst) {
- writer.AddObjKey("ellipsoid");
+ writer->AddObjKey("ellipsoid");
formatter->setOmitTypeInImmediateChild();
grfFirst->ellipsoid()->_exportToJSON(formatter);
}
- writer.AddObjKey("accuracy");
- writer.Add(positionalAccuracy()->value());
+ writer->AddObjKey("accuracy");
+ writer->Add(positionalAccuracy()->value());
formatID(formatter);
}
@@ -1886,26 +1888,26 @@ void VerticalReferenceFrame::_exportToJSON(
auto objectContext(formatter->MakeObjectContext(
dynamicGRF ? "DynamicVerticalReferenceFrame" : "VerticalReferenceFrame",
!identifiers().empty()));
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
- writer.AddObjKey("name");
+ writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
- writer.Add("unnamed");
+ writer->Add("unnamed");
} else {
- writer.Add(l_name);
+ writer->Add(l_name);
}
Datum::getPrivate()->exportAnchorDefinition(formatter);
if (dynamicGRF) {
- writer.AddObjKey("frame_reference_epoch");
- writer.Add(dynamicGRF->frameReferenceEpoch().value());
+ writer->AddObjKey("frame_reference_epoch");
+ writer->Add(dynamicGRF->frameReferenceEpoch().value());
const auto &deformationModel = dynamicGRF->deformationModelName();
if (deformationModel.has_value()) {
- writer.AddObjKey("deformation_model");
- writer.Add(*deformationModel);
+ writer->AddObjKey("deformation_model");
+ writer->Add(*deformationModel);
}
}
@@ -2185,18 +2187,18 @@ void TemporalDatum::_exportToJSON(
{
auto objectContext(
formatter->MakeObjectContext("TemporalDatum", !identifiers().empty()));
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
- writer.AddObjKey("name");
- writer.Add(nameStr());
+ writer->AddObjKey("name");
+ writer->Add(nameStr());
- writer.AddObjKey("calendar");
- writer.Add(calendar());
+ writer->AddObjKey("calendar");
+ writer->Add(calendar());
const auto &timeOriginStr = temporalOrigin().toString();
if (!timeOriginStr.empty()) {
- writer.AddObjKey("time_origin");
- writer.Add(timeOriginStr);
+ writer->AddObjKey("time_origin");
+ writer->Add(timeOriginStr);
}
ObjectUsage::baseExportToJSON(formatter);
@@ -2285,10 +2287,10 @@ void EngineeringDatum::_exportToJSON(
{
auto objectContext(formatter->MakeObjectContext("EngineeringDatum",
!identifiers().empty()));
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
- writer.AddObjKey("name");
- writer.Add(nameStr());
+ writer->AddObjKey("name");
+ writer->Add(nameStr());
Datum::getPrivate()->exportAnchorDefinition(formatter);
@@ -2371,10 +2373,10 @@ void ParametricDatum::_exportToJSON(
{
auto objectContext(formatter->MakeObjectContext("ParametricDatum",
!identifiers().empty()));
- auto &writer = formatter->writer();
+ auto writer = formatter->writer();
- writer.AddObjKey("name");
- writer.Add(nameStr());
+ writer->AddObjKey("name");
+ writer->Add(nameStr());
Datum::getPrivate()->exportAnchorDefinition(formatter);