// [[Rcpp::export]] Rcpp::List CPL_crs_parameters(std::string p4s) { Rcpp::List out(7); OGRErr Err; OGRSpatialReference *srs = new OGRSpatialReference; handle_error(srs->importFromProj4(p4s.c_str())); out(0) = Rcpp::NumericVector::create(srs->GetSemiMajor()); out(1) = Rcpp::NumericVector::create(srs->GetSemiMinor()); Rcpp::NumericVector InvFlattening(1); srs->GetInvFlattening(&Err); if (Err == OGRERR_FAILURE) InvFlattening(0) = NA_REAL; // #nocov else InvFlattening(0) = srs->GetInvFlattening(NULL); // for +ellps=sphere, still zero :-( out(2) = InvFlattening; out(3) = Rcpp::CharacterVector::create(srs->GetAttrValue("UNIT", 0)); out(4) = Rcpp::LogicalVector::create(srs->IsVertical()); char *cp; srs->exportToPrettyWkt(&cp); out(5) = Rcpp::CharacterVector::create(cp); CPLFree(cp); srs->exportToWkt(&cp); out(6) = Rcpp::CharacterVector::create(cp); CPLFree(cp); delete srs; return out; }