Go to the documentation of this file.
44 if (!(setzone >= MINPSEUDOZONE && setzone <= MAXZONE))
46 if (setzone >= MINZONE || setzone ==
INVALID)
50 if (setzone == UTM || (
lat >= -80 &&
lat < 84)) {
56 int zone = (ilon + 186)/6;
58 if (
band == 7 && zone == 31 && ilon >= 3)
60 else if (
band == 9 && ilon >= 0 && ilon < 42)
61 zone = 2 * ((ilon + 183)/12) + 1;
70 int setzone,
bool mgrslimits) {
73 +
"d not in [-90d, 90d]");
74 bool northp1 =
lat >= 0;
75 int zone1 = StandardZone(
lat,
lon, setzone);
83 bool utmp = zone1 != UPS;
86 lon0 = CentralMeridian(zone1),
88 dlon =
abs(dlon - 360 *
floor((dlon + 180)/360));
93 +
"d more than 60d from center of UTM zone "
100 +
"d more than 20d from "
101 + (northp1 ?
"N" :
"S") +
" pole");
104 int ind = (utmp ? 2 : 0) + (northp1 ? 1 : 0);
105 x1 += falseeasting_[
ind];
106 y1 += falsenorthing_[
ind];
107 if (! CheckCoords(zone1 != UPS, northp1,
x1,
y1, mgrslimits,
false) )
110 +
" out of legal range for "
128 if (!(zone >= MINZONE && zone <= MAXZONE))
130 +
" not in range [0, 60]");
131 bool utmp = zone != UPS;
132 CheckCoords(utmp, northp,
x,
y, mgrslimits);
133 int ind = (utmp ? 2 : 0) + (northp ? 1 : 0);
134 x -= falseeasting_[
ind];
135 y -= falsenorthing_[
ind];
144 bool mgrslimits,
bool throwp) {
148 int ind = (utmp ? 2 : 0) + (northp ? 1 : 0);
149 if (
x < mineasting_[
ind] - slop ||
x > maxeasting_[
ind] + slop) {
150 if (!throwp)
return false;
152 + (mgrslimits ?
"MGRS/" :
"")
153 + (utmp ?
"UTM" :
"UPS") +
" range for "
154 + (northp ?
"N" :
"S" ) +
" hemisphere ["
160 if (
y < minnorthing_[
ind] - slop ||
y > maxnorthing_[
ind] + slop) {
161 if (!throwp)
return false;
163 + (mgrslimits ?
"MGRS/" :
"")
164 + (utmp ?
"UTM" :
"UPS") +
" range for "
165 + (northp ?
"N" :
"S" ) +
" hemisphere ["
175 int zoneout,
bool northpout,
real& xout,
real& yout,
177 bool northp = northpin;
178 if (zonein != zoneout) {
188 if (zone1 == 0 && northp != northpout)
190 (
"Attempt to transfer UPS coordinates between hemispheres");
195 if (zoneout == 0 && northp != northpout)
197 (
"Attempt to transfer UPS coordinates between hemispheres");
202 if (northp != northpout)
210 unsigned zlen = unsigned(zonestr.size());
215 throw GeographicErr(
"More than 7 characters in zone specification "
218 const char*
c = zonestr.c_str();
220 int zone1 = strtol(
c, &
q, 10);
227 ", use just the hemisphere for UPS");
228 }
else if (!(zone1 >= MINUTMZONE && zone1 <= MAXUTMZONE))
230 +
" not in range [1, 60]");
231 else if (!isdigit(zonestr[0]))
235 throw GeographicErr(
"More than 2 digits use to specify zone "
238 string hemi(zonestr,
q -
c);
239 for (std::string::iterator
p = hemi.begin();
p != hemi.end(); ++
p)
240 *
p = char(std::tolower(*
p));
241 if (
q ==
c && (hemi ==
"inv" || hemi ==
"invalid")) {
246 bool northp1 = hemi ==
"north" || hemi ==
"n";
247 if (!(northp1 || hemi ==
"south" || hemi ==
"s"))
248 throw GeographicErr(
string(
"Illegal hemisphere ") + hemi +
" in "
249 + zonestr +
", specify north or south");
256 return string(abbrev ?
"inv" :
"invalid");
257 if (!(zone >= MINZONE && zone <= MAXZONE))
259 +
" not in range [0, 60]");
262 os << setfill(
'0') << setw(2) << zone;
264 os << (northp ?
'n' :
's');
266 os << (northp ?
"north" :
"south");
272 if (epsg >= epsg01N && epsg <= epsg60N) {
273 zone = (epsg - epsg01N) + MINUTMZONE;
275 }
else if (epsg == epsgN) {
278 }
else if (epsg >= epsg01S && epsg <= epsg60S) {
279 zone = (epsg - epsg01S) + MINUTMZONE;
280 }
else if (epsg == epsgS) {
291 else if (zone >= MINUTMZONE && zone <= MAXUTMZONE)
292 epsg = (zone - MINUTMZONE) + epsg01S;
293 if (epsg >= 0 && northp)
294 epsg += epsgN - epsgS;
Header for GeographicLib::PolarStereographic class.
static std::string str(T x, int p=-1)
static const int mineasting_[4]
Namespace for GeographicLib.
static int LatitudeBand(real lat)
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
static const TransverseMercator & UTM()
static std::string EncodeZone(int zone, bool northp, bool abbrev=true)
static const int maxnorthing_[4]
static const int maxeasting_[4]
ofstream os("timeSchurFactors.csv")
static void Transfer(int zonein, bool northpin, real xin, real yin, int zoneout, bool northpout, real &xout, real &yout, int &zone)
static void DecodeEPSG(int epsg, int &zone, bool &northp)
Exception handling for GeographicLib.
void Reverse(bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k) const
Header for GeographicLib::UTMUPS class.
static const int minnorthing_[4]
static const PolarStereographic & UPS()
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 fmod(const bfloat16 &a, const bfloat16 &b)
Header for GeographicLib::TransverseMercator class.
EIGEN_DEVICE_FUNC const Scalar & q
void Forward(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const
Header for GeographicLib::Utility class.
static int EncodeEPSG(int zone, bool northp)
static void Forward(real lat, real lon, int &zone, bool &northp, real &x, real &y, real &gamma, real &k, int setzone=STANDARD, bool mgrslimits=false)
Header for GeographicLib::MGRS class.
static const int falsenorthing_[4]
static void DecodeZone(const std::string &zonestr, int &zone, bool &northp)
static Math::real UTMShift()
static void Reverse(int zone, bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k, bool mgrslimits=false)
void Reverse(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const
static int StandardZone(real lat, real lon, int setzone=STANDARD)
void Forward(bool northp, real lat, real lon, real &x, real &y, real &gamma, real &k) const
EIGEN_ALWAYS_INLINE void band(PacketBlock< Packet, 4 > &acc, const Packet &pMask)
static bool CheckCoords(bool utmp, bool northp, real x, real y, bool msgrlimits=false, bool throwp=true)
const EIGEN_DEVICE_FUNC FloorReturnType floor() const
static const int falseeasting_[4]
gtsam
Author(s):
autogenerated on Sun Dec 22 2024 04:18:23