2017-04-03 20:29:35 +02:00
|
|
|
#include "ellipsoid.h"
|
2017-04-01 16:25:33 +02:00
|
|
|
#include "utm.h"
|
|
|
|
|
2017-04-09 10:26:09 +02:00
|
|
|
UTM::UTM(const Ellipsoid &ellipsoid, int zone)
|
|
|
|
: _tm(ellipsoid, (qAbs(zone) - 1)*6 - 180 + 3, 0.9996, 500000,
|
|
|
|
zone < 0 ? 10000000 : 0)
|
2017-04-03 20:29:35 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-04-09 10:26:09 +02:00
|
|
|
UTM::UTM(const Ellipsoid &ellipsoid, const Coordinates &c)
|
|
|
|
: _tm(ellipsoid, 0, 0, 0, 0)
|
2017-04-01 16:25:33 +02:00
|
|
|
{
|
|
|
|
int zone = int((c.lon() + 180)/6) + 1;
|
|
|
|
|
|
|
|
if (c.lat() >= 56.0 && c.lat() < 64.0 && c.lon() >= 3.0 && c.lon() < 12.0)
|
|
|
|
zone = 32;
|
|
|
|
if (c.lat() >= 72.0 && c.lat() < 84.0) {
|
|
|
|
if (c.lon() >= 0.0 && c.lon() < 9.0)
|
|
|
|
zone = 31;
|
|
|
|
else if (c.lon() >= 9.0 && c.lon() < 21.0)
|
|
|
|
zone = 33;
|
|
|
|
else if (c.lon() >= 21.0 && c.lon() < 33.0)
|
|
|
|
zone = 35;
|
|
|
|
else if (c.lon() >= 33.0 && c.lon() < 42.0)
|
|
|
|
zone = 37;
|
|
|
|
}
|
|
|
|
double cm = (zone - 1)*6 - 180 + 3;
|
|
|
|
|
2017-04-09 10:26:09 +02:00
|
|
|
_tm = TransverseMercator(ellipsoid, cm, 0.9996, 500000,
|
2017-04-03 20:29:35 +02:00
|
|
|
(c.lat() < 0) ? 10000000 : 0);
|
2017-04-01 16:25:33 +02:00
|
|
|
}
|