Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _transit(lon1, lon2):
"""Count crossings of prime meridian for AddPoint."""
# Return 1 or -1 if crossing prime meridian in east or west direction.
# Otherwise return zero.
# Compute lon12 the same way as Geodesic::Inverse.
lon1 = Math.AngNormalize(lon1)
lon2 = Math.AngNormalize(lon2)
lon12, _ = Math.AngDiff(lon1, lon2)
cross = (1 if lon1 <= 0 and lon2 > 0 and lon12 > 0
else (-1 if lon2 <= 0 and lon1 > 0 and lon12 < 0 else 0))
return cross
_transit = staticmethod(_transit)
def transit(lon1, lon2):
"""Count crossings of prime meridian."""
# Return 1 or -1 if crossing prime meridian in east or west direction.
# Otherwise return zero.
# Compute lon12 the same way as Geodesic::Inverse.
lon1 = Math.AngNormalize(lon1)
lon2 = Math.AngNormalize(lon2)
lon12 = Math.AngDiff(lon1, lon2)
cross = (1 if lon1 < 0 and lon2 >= 0 and lon12 > 0
else (-1 if lon2 < 0 and lon1 >= 0 and lon12 < 0 else 0))
return cross
transit = staticmethod(transit)
:param outmask: the :ref:`output mask `
:return: a :ref:`dict`
Compute geodesic starting at (*lat1*, *lon1*) with azimuth *azi1*
and arc length *a12*. The default value of *outmask* is STANDARD,
i.e., the *lat1*, *lon1*, *azi1*, *lat2*, *lon2*, *azi2*, *s12*,
*a12* entries are returned.
"""
a12, lat2, lon2, azi2, s12, m12, M12, M21, S12 = self._GenDirect(
lat1, lon1, azi1, True, a12, outmask)
outmask &= Geodesic.OUT_MASK
result = {'lat1': Math.LatFix(lat1),
'lon1': lon1 if outmask & Geodesic.LONG_UNROLL else
Math.AngNormalize(lon1),
'azi1': Math.AngNormalize(azi1),
'a12': a12}
if outmask & Geodesic.DISTANCE: result['s12'] = s12
if outmask & Geodesic.LATITUDE: result['lat2'] = lat2
if outmask & Geodesic.LONGITUDE: result['lon2'] = lon2
if outmask & Geodesic.AZIMUTH: result['azi2'] = azi2
if outmask & Geodesic.REDUCEDLENGTH: result['m12'] = m12
if outmask & Geodesic.GEODESICSCALE:
result['M12'] = M12; result['M21'] = M21
if outmask & Geodesic.AREA: result['S12'] = S12
return result
# omg12 = omg2 - omg1
omg12 = (E * (sig12
- (math.atan2( ssig2, csig2) -
math.atan2( self._ssig1, self._csig1))
+ (math.atan2(E * somg2, comg2) -
math.atan2(E * self._somg1, self._comg1)))
if outmask & Geodesic.LONG_UNROLL
else math.atan2(somg2 * self._comg1 - comg2 * self._somg1,
comg2 * self._comg1 + somg2 * self._somg1))
lam12 = omg12 + self._A3c * (
sig12 + (Geodesic._SinCosSeries(True, ssig2, csig2, self._C3a)
- self._B31))
lon12 = math.degrees(lam12)
lon2 = (self.lon1 + lon12 if outmask & Geodesic.LONG_UNROLL else
Math.AngNormalize(Math.AngNormalize(self.lon1) +
Math.AngNormalize(lon12)))
if outmask & Geodesic.LATITUDE:
lat2 = Math.atan2d(sbet2, self._f1 * cbet2)
if outmask & Geodesic.AZIMUTH:
azi2 = Math.atan2d(salp2, calp2)
if outmask & (Geodesic.REDUCEDLENGTH | Geodesic.GEODESICSCALE):
B22 = Geodesic._SinCosSeries(True, ssig2, csig2, self._C2a)
AB2 = (1 + self._A2m1) * (B22 - self._B21)
J12 = (self._A1m1 - self._A2m1) * sig12 + (AB1 - AB2)
if outmask & Geodesic.REDUCEDLENGTH:
# Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure
# accurate cancellation in the case of coincident points.
m12 = self._b * (( dn2 * (self._csig1 * ssig2) -
self._dn1 * (self._ssig1 * csig2))
def CheckPosition(lat, lon):
"""Check that lat and lon are legal and return normalized lon"""
if (abs(lat) > 90):
raise ValueError("latitude " + str(lat) + " not in [-90, 90]")
if (lon < -540 or lon >= 540):
raise ValueError("longitude " + str(lon) + " not in [-540, 540)")
return Math.AngNormalize(lon)
CheckPosition = staticmethod(CheckPosition)