void GeoConvHelper::init(const std::string& proj, const Position& offset, const Boundary& orig, const Boundary& conv, int shift) { myProcessing = GeoConvHelper(proj, offset, orig, conv, shift); myFinal = myProcessing; }
void GeoConvHelper::computeFinal(bool lefthand) { if (myNumLoaded == 0) { myFinal = myProcessing; } else { myFinal = GeoConvHelper( // prefer options over loaded location myProcessing.usingGeoProjection() ? myProcessing.getProjString() : myLoaded.getProjString(), // let offset and boundary lead back to the original coords of the loaded data myProcessing.getOffset() + myLoaded.getOffset(), myLoaded.getOrigBoundary(), // the new boundary (updated during loading) myProcessing.getConvBoundary()); } if (lefthand) { myFinal.myOffset.mul(1, -1); myFinal.myConvBoundary.flipY(); } }
bool GeoConvHelper::init(OptionsCont& oc) { std::string proj = "!"; // the default double scale = oc.getFloat("proj.scale"); double rot = oc.getFloat("proj.rotate"); Position offset = Position(oc.getFloat("offset.x"), oc.getFloat("offset.y")); bool inverse = oc.exists("proj.inverse") && oc.getBool("proj.inverse"); bool flatten = oc.exists("flatten") && oc.getBool("flatten"); if (oc.getBool("simple-projection")) { proj = "-"; } #ifdef PROJ_API_FILE if (oc.getBool("proj.inverse") && oc.getString("proj") == "!") { WRITE_ERROR("Inverse projection works only with explicit proj parameters."); return false; } unsigned numProjections = oc.getBool("simple-projection") + oc.getBool("proj.utm") + oc.getBool("proj.dhdn") + oc.getBool("proj.dhdnutm") + (oc.getString("proj").length() > 1); if (numProjections > 1) { WRITE_ERROR("The projection method needs to be uniquely defined."); return false; } if (oc.getBool("proj.utm")) { proj = "UTM"; } else if (oc.getBool("proj.dhdn")) { proj = "DHDN"; } else if (oc.getBool("proj.dhdnutm")) { proj = "DHDN_UTM"; } else if (!oc.isDefault("proj")) { proj = oc.getString("proj"); } #endif myProcessing = GeoConvHelper(proj, offset, Boundary(), Boundary(), scale, rot, inverse, flatten); myFinal = myProcessing; return true; }