Index: inundation/coordinate_transforms/redfearn.py
===================================================================
--- inundation/coordinate_transforms/redfearn.py	(revision 3279)
+++ inundation/coordinate_transforms/redfearn.py	(revision 3280)
@@ -2,4 +2,5 @@
 
 """
+from coordinate_transforms.geo_reference import Geo_reference, DEFAULT_ZONE
 
 def degminsec2decimal_degrees(dd,mm,ss):
@@ -159,2 +160,30 @@
     
     return zone, easting, northing
+
+def convert_lats_longs(latitudes,
+                       longitudes,
+                       false_easting=None,
+                       false_northing=None):
+    """
+    Redfearn a list of latitudes and longitudes.
+
+    Assume the false_easting and false_northing are the same for each list.
+
+    Note, if a zone turns out to be different, an ANUGAerror is thrown.
+    """
+    # Using geo_ref so there is only one point in the code where zones
+    # are checked.
+    old_geo = Geo_reference()
+    points = []
+    
+    for lat, long in map(None, latitudes, longitudes,):
+        zone, easting, northing = redfearn(lat,
+                                           long,
+                                           false_easting=false_easting,
+                                           false_northing=false_northing)
+        new_geo = Geo_reference(zone)
+        old_geo.reconcile_zones(new_geo)
+        #print "old_geo.get_zone()", old_geo.get_zone()
+        points.append([easting, northing])
+        
+    return old_geo.get_zone(), points
Index: inundation/coordinate_transforms/test_redfearn.py
===================================================================
--- inundation/coordinate_transforms/test_redfearn.py	(revision 3279)
+++ inundation/coordinate_transforms/test_redfearn.py	(revision 3280)
@@ -7,7 +7,8 @@
 
 import unittest
-from redfearn import *
 from Numeric import allclose
 
+from redfearn import *
+from utilities.anuga_exceptions import ANUGAError
 
 #-------------------------------------------------------------
@@ -139,5 +140,51 @@
     #    #assert allclose(northing, 6181725.1724276)
 
+    def test_convert_lats_longs(self):
 
+        #Site Name:    GDA-MGA: (UTM with GRS80 ellipsoid) 
+        #Zone:   56    
+        #Easting:  222908.705  Northing: 6233785.284 
+        #Latitude:   -34  0 ' 0.00000 ''  Longitude: 150  0 ' 0.00000 '' 
+        #Grid Convergence:  -1  40 ' 43.13 ''  Point Scale: 1.00054660 
+
+        lat_gong = degminsec2decimal_degrees(-34,30,0.)
+        lon_gong = degminsec2decimal_degrees(150,55,0.)
+        
+        lat_2 = degminsec2decimal_degrees(-34,00,0.)
+        lon_2 = degminsec2decimal_degrees(150,00,0.)
+        
+        lats = [lat_gong, lat_2]
+        longs = [lon_gong, lon_2]
+        zone, points = convert_lats_longs(lats, longs)
+
+        assert allclose(points[0][0], 308728.009)
+        assert allclose(points[0][1], 6180432.601)
+        assert allclose(points[1][0],  222908.705)
+        assert allclose(points[1][1], 6233785.284)
+        self.failUnless(zone == 56,
+                        'Bad zone error!')
+    def test_convert_lats_longs2(self):
+
+        #Site Name:    GDA-MGA: (UTM with GRS80 ellipsoid) 
+        #Zone:   56    
+        #Easting:  222908.705  Northing: 6233785.284 
+        #Latitude:   -34  0 ' 0.00000 ''  Longitude: 150  0 ' 0.00000 '' 
+        #Grid Convergence:  -1  40 ' 43.13 ''  Point Scale: 1.00054660 
+
+        lat_gong = degminsec2decimal_degrees(-34,30,0.)
+        lon_gong = degminsec2decimal_degrees(150,55,0.)
+        
+        lat_2 = degminsec2decimal_degrees(34,00,0.)
+        lon_2 = degminsec2decimal_degrees(100,00,0.)
+        
+        lats = [lat_gong, lat_2]
+        longs = [lon_gong, lon_2]
+        try:
+            zone, points = convert_lats_longs(lats, longs)
+        except ANUGAError:
+            pass
+        else:
+            self.failUnless(0 ==1,
+                        'Error not thrown error!')
 
 #-------------------------------------------------------------
Index: inundation/geospatial_data/geospatial_data.py
===================================================================
--- inundation/geospatial_data/geospatial_data.py	(revision 3279)
+++ inundation/geospatial_data/geospatial_data.py	(revision 3280)
@@ -4,12 +4,11 @@
 """
 
+from os import access, F_OK, R_OK
+from Numeric import concatenate, array, Float, shape
 
 from utilities.numerical_tools import ensure_numeric
-
-from Numeric import concatenate, array, Float, shape
-
 from coordinate_transforms.geo_reference import Geo_reference, TitleError
-
-from os import access, F_OK, R_OK
+from coordinate_transforms.redfearn import convert_lats_longs
+
         
 class Geospatial_data:
@@ -22,4 +21,6 @@
                  file_name = None,
                  delimiter = None,
+                 latitudes = None,
+                 longitudes = None,
                  verbose = False):
 
@@ -104,4 +105,10 @@
                 raise ValueError, msg
             file_name = None
+            if latitudes is not None or longitudes is not None:
+                data_points, geo_reference =  \
+                             self._set_using_lat_long(latitudes=latitudes,
+                                                  longitudes=longitudes,
+                                                  geo_reference=geo_reference,
+                                                  data_points=data_points)
             self.check_data_points(data_points)
             self.set_attributes(attributes)
@@ -191,4 +198,29 @@
             verbose = False
    
+    def _set_using_lat_long(self,
+                            latitudes,
+                            longitudes,
+                            geo_reference,
+                            data_points):
+        if geo_reference is not None:
+            msg = """A georeference is specified yet latitude and longitude are also specified!"""
+            raise ValueError, msg
+         
+        if data_points is not None:
+            msg = """Data points are specified yet latitude and longitude are also specified!"""
+            raise ValueError, msg
+        
+        if latitudes is None:
+            msg = """Longitudes are specified yet latitudes aren't!"""
+            raise ValueError, msg
+        
+        if longitudes is None:
+            msg = """latitudes are specified yet longitudes aren't!"""
+            raise ValueError, msg
+        
+        zone, data_points = convert_lats_longs(latitudes, longitudes)
+        
+        return data_points, Geo_reference(zone=zone)
+    
     def get_geo_reference(self):
         return self.geo_reference
Index: inundation/geospatial_data/test_geospatial_data.py
===================================================================
--- inundation/geospatial_data/test_geospatial_data.py	(revision 3279)
+++ inundation/geospatial_data/test_geospatial_data.py	(revision 3280)
@@ -9,6 +9,7 @@
 
 from geospatial_data import *
-
 from coordinate_transforms.geo_reference import Geo_reference, TitleError
+from coordinate_transforms.redfearn import degminsec2decimal_degrees
+
 
 class Test_Geospatial_data(unittest.TestCase):
@@ -1247,7 +1248,67 @@
 
 
+        
+    def test_lat_long(self):
+        lat_gong = degminsec2decimal_degrees(-34,30,0.)
+        lon_gong = degminsec2decimal_degrees(150,55,0.)
+        
+        lat_2 = degminsec2decimal_degrees(-34,00,0.)
+        lon_2 = degminsec2decimal_degrees(150,00,0.)
+        
+        lats = [lat_gong, lat_2]
+        longs = [lon_gong, lon_2]
+        gsd = Geospatial_data(latitudes=lats, longitudes=longs)
+
+        points = gsd.get_data_points(absolute=True)
+        
+        assert allclose(points[0][0], 308728.009)
+        assert allclose(points[0][1], 6180432.601)
+        assert allclose(points[1][0],  222908.705)
+        assert allclose(points[1][1], 6233785.284)
+        self.failUnless(gsd.get_geo_reference().get_zone() == 56,
+                        'Bad zone error!')
+        
+        try:
+            results = Geospatial_data(latitudes=lats)
+        except ValueError:
+            pass
+        else:
+            self.failUnless(0 ==1,
+                        'Error not thrown error!')
+        try:
+            results = Geospatial_data(latitudes=lats)
+        except ValueError:
+            pass
+        else:
+            self.failUnless(0 ==1,
+                        'Error not thrown error!')
+        try:
+            results = Geospatial_data(longitudes=lats)
+        except ValueError:
+            pass
+        else:
+            self.failUnless(0 ==1,
+                        'Error not thrown error!')
+        try:
+            results = Geospatial_data(latitudes=lats, longitudes=longs,
+                                      geo_reference="p")
+        except ValueError:
+            pass
+        else:
+            self.failUnless(0 ==1,
+                        'Error not thrown error!')
+            
+        try:
+            results = Geospatial_data(latitudes=lats, longitudes=longs,
+                                      data_points=12)
+        except ValueError:
+            pass
+        else:
+            self.failUnless(0 ==1,
+                        'Error not thrown error!')
+            
 if __name__ == "__main__":
 
-    #suite = unittest.makeSuite(Test_Geospatial_data, 'test_isinstance')
+    #suite = unittest.makeSuite(Test_Geospatial_data, 'test_lat_long')
     suite = unittest.makeSuite(Test_Geospatial_data, 'test')
     runner = unittest.TextTestRunner()
