projections
index
/Users/schwehr/projects/xcore/src/segy-py/projections.py

Python module to try to handle distances between two close locations.
 
     Copyright (C) 2005  Kurt Schwehr
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
$Id: projections.py,v 1.10 2005/10/08 22:41:48 schwehr Exp $
 
This module is just a hack/prototype for now.  The real solution is to
use something like proj.4 and/or talk to someone who actually knows
projections and datums.

 
Modules
       
math
sys
unittest

 
Classes
       
unittest.TestCase(__builtin__.object)
TestDistance

 
class TestDistance(unittest.TestCase)
    
Method resolution order:
TestDistance
unittest.TestCase
__builtin__.object

Methods defined here:
testDegDec2DegMinSec(self)
testUtmZone(self)
testWikipedia(self)
http://en.wikipedia.org/wiki/Great_circle_distance
BNA 36.12  -86.67
LAX 33.94 -118.40

Methods inherited from unittest.TestCase:
__call__(self, *args, **kwds)
__init__(self, methodName='runTest')
Create an instance of the class that will use the named test
method when executed. Raises a ValueError if the instance does
not have a method with the specified name.
__repr__(self)
__str__(self)
assertAlmostEqual = failUnlessAlmostEqual(self, first, second, places=7, msg=None)
Fail if the two objects are unequal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
 
Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).
assertAlmostEquals = failUnlessAlmostEqual(self, first, second, places=7, msg=None)
Fail if the two objects are unequal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
 
Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).
assertEqual = failUnlessEqual(self, first, second, msg=None)
Fail if the two objects are unequal as determined by the '=='
operator.
assertEquals = failUnlessEqual(self, first, second, msg=None)
Fail if the two objects are unequal as determined by the '=='
operator.
assertFalse = failIf(self, expr, msg=None)
Fail the test if the expression is true.
assertNotAlmostEqual = failIfAlmostEqual(self, first, second, places=7, msg=None)
Fail if the two objects are equal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
 
Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).
assertNotAlmostEquals = failIfAlmostEqual(self, first, second, places=7, msg=None)
Fail if the two objects are equal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
 
Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).
assertNotEqual = failIfEqual(self, first, second, msg=None)
Fail if the two objects are equal as determined by the '=='
operator.
assertNotEquals = failIfEqual(self, first, second, msg=None)
Fail if the two objects are equal as determined by the '=='
operator.
assertRaises = failUnlessRaises(self, excClass, callableObj, *args, **kwargs)
Fail unless an exception of class excClass is thrown
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
thrown, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.
assertTrue = failUnless(self, expr, msg=None)
Fail the test unless the expression is true.
assert_ = failUnless(self, expr, msg=None)
Fail the test unless the expression is true.
countTestCases(self)
debug(self)
Run the test without collecting errors in a TestResult
defaultTestResult(self)
fail(self, msg=None)
Fail immediately, with the given message.
failIf(self, expr, msg=None)
Fail the test if the expression is true.
failIfAlmostEqual(self, first, second, places=7, msg=None)
Fail if the two objects are equal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
 
Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).
failIfEqual(self, first, second, msg=None)
Fail if the two objects are equal as determined by the '=='
operator.
failUnless(self, expr, msg=None)
Fail the test unless the expression is true.
failUnlessAlmostEqual(self, first, second, places=7, msg=None)
Fail if the two objects are unequal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
 
Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).
failUnlessEqual(self, first, second, msg=None)
Fail if the two objects are unequal as determined by the '=='
operator.
failUnlessRaises(self, excClass, callableObj, *args, **kwargs)
Fail unless an exception of class excClass is thrown
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
thrown, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.
id(self)
run(self, result=None)
setUp(self)
Hook method for setting up the test fixture before exercising it.
shortDescription(self)
Returns a one-line description of the test, or None if no
description has been provided.
 
The default implementation of this method returns the first line of
the specified test method's docstring.
tearDown(self)
Hook method for deconstructing the test fixture after testing it.

Data and other attributes inherited from unittest.TestCase:
__dict__ = <dictproxy object>
dictionary for instance variables (if defined)
__weakref__ = <attribute '__weakref__' of 'TestCase' objects>
list of weak references to the object (if defined)
failureException = <class exceptions.AssertionError>
Assertion failed.

 
Functions
       
decimalDeg2degMinSec(angle)
Convert decimal degrees to Degrees, Minutes, Seconds..
 
FIX: need a function that makes a pretty print version
Optionally a LaTeX long lat output would be cool too!
 
-120$^{\circ}$ 28' 27.06'', 34.0$^{\circ}$ 15' 52.01''
or
120$^{\circ}$ 28' 27.06'' W, 34.0$^{\circ}$ 15' 52.01'' N
 
and be able to specify which one first
deg2rad(degrees)
degMinSec2decDeg(deg, min, sec)
Convert degrees, minutes, seconds to decimal degrees
 
 
>>> degMinSec2decDeg(-121,29,05.54)
dist(x1, y1, x2, y2)
Straight linear distance.  Very exciting!
distPoints(p1, p2)
Straight linear distance.  Very exciting!
feet2meters(feet)
boring unit coversion
getDistance(lonlat1, lonlat2, utmZone=None)
return the distance in meters between two lon,lat tuples
 
lonlat1 - Decimal lonlat tuple
lonlat2 - Decimal lonlat tuple
utmZone - Force which utm zone to be in... careful!
 
returns - distance in meters
 
Uses proj utm.  Slow since it has to setup the projection each time
greatCircleDistKm(lonlat1, lonlat2)
Distance for far apart objects (0.5 % error)
 
http://en.wikipedia.org/wiki/Great_circle_distance
greatCircleDistMeters(lonlat1, lonlat2)
http://en.wikipedia.org/wiki/Great_circle_distance
invprojll2decdeg(lineString)
124d22'38.01"W  40d49'51.038"N to decimal
lonlat2utm(lon, lat, datum='wgs84')
returns easting, northing, zone
meters2twtt(meters, velocity=1500)
Change a length into a flight two way travel time (seconds)
 
meters - length to convert to travel time
velocity - sound velocity to use (meters/sec)
 
assumes constant velocity from the source/receiver to the reflector
metersPerShot(shot1, lonlat1, shot2, lonlat2, utmZone=None)
Calculate the meter separation per shot
 
FIX: make utmZone go away
rad2deg(radians)
utm2lonlat(easting, northing, zone=None)
Figure the zone ourselves if None
utmzone(lon, lat=0.0)
Return the utm zone number
 
http://www.dmap.co.uk/utmworld.htm
utmzone2(lon, lat)
Also returns the letter for the zone
 
http://www.dmap.co.uk/utmworld.htm