Changeset 1057


Ignore:
Timestamp:
Mar 10, 2005, 1:32:08 PM (20 years ago)
Author:
duncan
Message:

added point transformation from different geo refs

Location:
inundation/ga/storm_surge/pyvolution/coordinate_transforms
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • inundation/ga/storm_surge/pyvolution/coordinate_transforms/geo_reference.py

    r1046 r1057  
    33
    44import types
     5from Numeric import array,Float,ArrayType
    56
    67class Geo_reference:
     
    7374        #false_northing = infile.false_northing[0]
    7475
    75     def change_geo_ref(self, primary_geo_ref,
    76                        secondary_geo_ref, secondary_points):
     76    def change_point_geo_ref(self, points,
     77                       point_geo_ref=None):
     78        """
     79        Change the reference of a list or Numeric array of points.
     80        If the points do not have ageo ref, assume 'absolute' values
     81        """
     82        is_list = False
     83        if type(points) == types.ListType:
     84            is_list = True
     85            if len(points)>0 and type(points[0]) not in [types.ListType,types.TupleType]:
     86                #a single pont is being passed.  make it a list of lists
     87                points = [points]
     88        elif type(points) == ArrayType:
     89            if len(points.shape) == 1:
     90                points = [points]
     91               
     92           
     93           
    7794        #convert into array
    78         #add secondary geo ref to points
    79         #subtract secondary geo ref from points
     95        points = array(points).astype(Float)
     96        #add point geo ref to points
     97        if not point_geo_ref is None:
     98            points[:,0] += point_geo_ref.xllcorner
     99            points[:,1] += point_geo_ref.yllcorner
     100       
     101        #subtract primary geo ref from points
     102        points[:,0] -= self.xllcorner
     103        points[:,1] -= self.yllcorner
     104        if is_list:
     105            points = points.tolist()
    80106        # return points
    81         pass
     107        return points
    82108
     109   
     110    #def easting_northing2geo_reffed_point(self, x, y):
     111    #    return [x-self.xllcorner, y - self.xllcorner]
     112
     113    #def easting_northing2geo_reffed_points(self, x, y):
     114    #    return [x-self.xllcorner, y - self.xllcorner]
     115   
    83116    def __repr__(self):
    84117        return "(%f,%f, %i)" % (self.xllcorner,self.yllcorner, self.zone)
  • inundation/ga/storm_surge/pyvolution/coordinate_transforms/test_geo_reference.py

    r1049 r1057  
    77
    88from geo_reference import *
     9from Numeric import allclose,array
    910
    1011class geo_referenceTestCase(unittest.TestCase):
     
    4647
    4748        self.failUnless(g == new_g, 'test_read_write_ASCII failed') 
     49   
     50    def test_change_point_geo_ref(self):
     51        x = 3.0
     52        y = 3.0
     53        g = Geo_reference(56,x,y)
     54        lofl = [[3.0,3.0], [6.0,6.0]]
     55        new_lofl = g.change_point_geo_ref(lofl)
     56        #print "lofl",lofl
     57        #print "new_lofl",new_lofl
     58
     59        self.failUnless(type(new_lofl) == types.ListType, ' failed')
     60        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     61        for point,new_point in map(None,lofl,new_lofl):
     62            self.failUnless(point[0]-x==new_point[0], ' failed')
     63            self.failUnless(point[1]-y==new_point[1], ' failed')
    4864       
     65    def test_change_point_geo_ref2(self):
     66        x = 3.0
     67        y = 3.0
     68        g = Geo_reference(56,x,y)
     69        lofl = [[3.0,3.0]]
     70        new_lofl = g.change_point_geo_ref(lofl)
     71        #print "lofl",lofl
     72        #print "new_lofl",new_lofl
     73
     74        self.failUnless(type(new_lofl) == types.ListType, ' failed')
     75        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     76        for point,new_point in map(None,lofl,new_lofl):
     77            self.failUnless(point[0]-x==new_point[0], ' failed')
     78            self.failUnless(point[1]-y==new_point[1], ' failed')
     79       
     80    def test_change_point_geo_ref3(self):
     81        x = 3.0
     82        y = 3.0
     83        g = Geo_reference(56,x,y)
     84        lofl = [3.0,3.0]
     85        new_lofl = g.change_point_geo_ref(lofl)
     86        #print "lofl",lofl
     87        #print "new_lofl",new_lofl
     88
     89        self.failUnless(type(new_lofl) == types.ListType, ' failed')
     90        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     91        for point,new_point in map(None,[lofl],new_lofl):
     92            self.failUnless(point[0]-x==new_point[0], ' failed')
     93            self.failUnless(point[1]-y==new_point[1], ' failed')
     94       
     95   
     96    def test_change_point_geo_ref4(self):
     97        x = 3.0
     98        y = 3.0
     99        g = Geo_reference(56,x,y)
     100        lofl = array([[3.0,3.0], [6.0,6.0]])
     101        new_lofl = g.change_point_geo_ref(lofl)
     102        #print "4 lofl",lofl
     103        #print "4 new_lofl",new_lofl
     104
     105        self.failUnless(type(new_lofl) == ArrayType, ' failed')
     106        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     107        lofl[:,0] -= x
     108        lofl[:,1] -= y
     109        assert allclose(lofl,new_lofl)
     110       
     111    def test_change_point_geo_ref5(self):
     112        x = 3.0
     113        y = 3.0
     114        g = Geo_reference(56,x,y)
     115        lofl = array([[3.0,3.0]])
     116        new_lofl = g.change_point_geo_ref(lofl)
     117        #print "5 lofl",lofl
     118        #print "5 new_lofl",new_lofl
     119
     120        self.failUnless(type(new_lofl) == ArrayType, ' failed')
     121        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     122        for point,new_point in map(None,lofl,new_lofl):
     123            self.failUnless(point[0]-x==new_point[0], ' failed')
     124            self.failUnless(point[1]-y==new_point[1], ' failed')
     125       
     126    def test_change_point_geo_ref6(self):
     127        x = 3.0
     128        y = 3.0
     129        g = Geo_reference(56,x,y)
     130        lofl = array([3.0,3.0])
     131        new_lofl = g.change_point_geo_ref(lofl)
     132        #print "lofl",lofl
     133        #print "new_lofl",new_lofl
     134
     135        self.failUnless(type(new_lofl) == ArrayType, ' failed')
     136        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     137        for point,new_point in map(None,[lofl],new_lofl):
     138            self.failUnless(point[0]-x==new_point[0], ' failed')
     139            self.failUnless(point[1]-y==new_point[1], ' failed')
     140     
     141    def test_change_point_geo_ref7(self):
     142        x = 3.0
     143        y = 3.0
     144        point_x = 9.0
     145        point_y = -60.0
     146        g = Geo_reference(56,x,y)
     147        point_geo_ref = Geo_reference(56,point_x,point_y)
     148        lofl = [[3.0,3.0], [6.0,6.0]]
     149        new_lofl = g.change_point_geo_ref(lofl,point_geo_ref=point_geo_ref)
     150        #print "lofl",lofl
     151        #print "new_lofl",new_lofl
     152
     153        self.failUnless(type(new_lofl) == types.ListType, ' failed')
     154        self.failUnless(type(new_lofl) == type(lofl), ' failed')
     155        for point,new_point in map(None,lofl,new_lofl):
     156            self.failUnless(point[0]+point_x-x==new_point[0], ' failed')
     157            self.failUnless(point[1]+point_y-y==new_point[1], ' failed')
     158               
    49159    def test___cmp__(self):
    50160        g = Geo_reference(56,1.9,1.9,)
Note: See TracChangeset for help on using the changeset viewer.