aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/crs.cpp2
-rw-r--r--src/iso19111/io.cpp56
2 files changed, 35 insertions, 23 deletions
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index adb441cd..ebbed7a1 100644
--- a/src/iso19111/crs.cpp
+++ b/src/iso19111/crs.cpp
@@ -1209,7 +1209,7 @@ void GeodeticCRS::addDatumInfoToPROJString(
const auto &nadgrids = formatter->getHDatumExtension();
const auto &l_datum = datum();
if (formatter->getCRSExport() && l_datum && TOWGS84Params.empty() &&
- nadgrids.empty()) {
+ nadgrids.empty() && !formatter->getDropEarlyBindingsTerms()) {
if (l_datum->_isEquivalentTo(
datum::GeodeticReferenceFrame::EPSG_6326.get(),
util::IComparable::Criterion::EQUIVALENT)) {
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index b3cd83d6..a82f24c7 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -5280,34 +5280,36 @@ PROJStringSyntaxParser(const std::string &projString, std::vector<Step> &steps,
const char *c_str = projString.c_str();
std::vector<std::string> tokens;
- size_t i = 0;
- while (true) {
- for (; isspace(c_str[i]); i++) {
- }
- std::string token;
- bool in_string = false;
- for (; c_str[i]; i++) {
- if (in_string) {
- if (c_str[i] == '"' && c_str[i + 1] == '"') {
+ {
+ size_t i = 0;
+ while (true) {
+ for (; isspace(c_str[i]); i++) {
+ }
+ std::string token;
+ bool in_string = false;
+ for (; c_str[i]; i++) {
+ if (in_string) {
+ if (c_str[i] == '"' && c_str[i + 1] == '"') {
+ i++;
+ } else if (c_str[i] == '"') {
+ in_string = false;
+ continue;
+ }
+ } else if (c_str[i] == '=' && c_str[i + 1] == '"') {
+ in_string = true;
+ token += c_str[i];
i++;
- } else if (c_str[i] == '"') {
- in_string = false;
continue;
+ } else if (isspace(c_str[i])) {
+ break;
}
- } else if (c_str[i] == '=' && c_str[i + 1] == '"') {
- in_string = true;
token += c_str[i];
- i++;
- continue;
- } else if (isspace(c_str[i])) {
+ }
+ if (token.empty()) {
break;
}
- token += c_str[i];
+ tokens.emplace_back(token);
}
- if (token.empty()) {
- break;
- }
- tokens.emplace_back(token);
}
bool prevWasTitle = false;
@@ -5356,10 +5358,20 @@ PROJStringSyntaxParser(const std::string &projString, std::vector<Step> &steps,
auto key = word.substr(0, pos);
if (!(dropEarlyBindingsTerms &&
(key == "towgs84" || key == "nadgrids" ||
- key == "geoidgrids" || key == "wktext"))) {
+ key == "geoidgrids"))) {
auto pair = (pos != std::string::npos)
? Step::KeyValue(key, word.substr(pos + 1))
: Step::KeyValue(key);
+ if (dropEarlyBindingsTerms && key == "datum") {
+ const auto datums = pj_get_datums_ref();
+ for (int i = 0; datums[i].id != nullptr; i++) {
+ if (pair.value == datums[i].id) {
+ pair.key = "ellps";
+ pair.value = datums[i].ellipse_id;
+ break;
+ }
+ }
+ }
if (steps.empty()) {
globalParamValues.push_back(pair);
} else {