def getutmzoneshift(self, e, n):
        zone = self.refutm[0]
        (rlat, rlon, ralt) = self.refgeo
        if e > 834000 or e < 166000:
            num_zones = (int(e) - 166000) / (utm.R/10)
            # estimate number of zones to shift, E (positive) or W (negative)
            rlon2 = self.refgeo[1] + (num_zones * 6)
            (e2, n2, zonen2, zonel2) = utm.from_latlon(rlat, rlon2)
            xshift = utm.haversine(rlon, rlat, rlon2, rlat)
            # after >3 zones away from refpt, the above estimate won't work
            # (the above estimate could be improved)
            if not 100000 <= (e - xshift) < 1000000:
                # move one more zone away
                num_zones = (abs(num_zones)+1) * (abs(num_zones)/num_zones)
                rlon2 = self.refgeo[1] + (num_zones * 6)
                (e2, n2, zonen2, zonel2) = utm.from_latlon(rlat, rlon2)
                xshift = utm.haversine(rlon, rlat, rlon2, rlat)
            e = e - xshift
            zone = (zonen2, zonel2)
        if n < 0:
            # refpt in northern hemisphere and we crossed south of equator
            n += 10000000
            zone = (zone[0], 'M')
        elif n > 10000000:
            # refpt in southern hemisphere and we crossed north of equator
            n -= 10000000
            zone = (zone[0], 'N')
        return (e, n, zone)
Given UTM easting and northing values, check if they fall outside
dataset/ETHPy150Open coreemu/core/daemon/core/location.py/CoreLocation.getutmzoneshift