Changeset 930

Show
Ignore:
Timestamp:
10/24/07 12:04:31
Author:
dokai
Message:

Implemented pickle support for DiskFeatureStore? and applied the "EPSG over
PROJ.4 preference" code from DiskFeatureStore? to DiskRasterStore?.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • PCL/trunk/PCL-GDAL/cartography/data/disk.py

    r912 r930  
    8181        """ 
    8282        self.path = path 
     83        self._featuretypes = {} 
     84        self._initialize_featuretypes() 
     85 
     86    def __getstate__(self): 
     87        """Pickle support""" 
     88        return (self.path,) 
     89 
     90    def __setstate__(self, state): 
     91        """Pickle support""" 
     92        self.path, = state 
    8393        self._featuretypes = {} 
    8494        self._initialize_featuretypes() 
     
    446456        """Return an informational dict, implementing IDataSource""" 
    447457        ds = gdal.Open(self.path) 
    448         srs = osr.SpatialReference() 
    449         srs.ImportFromWkt(ds.GetProjection()) 
    450         proj4 = srs.ExportToProj4() 
     458        sref = osr.SpatialReference() 
     459        sref.ImportFromWkt(ds.GetProjection()) 
     460        proj4 = sref.ExportToProj4() 
    451461        proj = proj4.strip() 
    452         srs = SpatialReference(proj).tostring() 
     462        srs = SpatialReference(proj) 
     463 
     464        try: 
     465            # Favor an EPSG code over PROJ.4 parameters if available 
     466            authority = sref.IsGeographic() and 'GEOGCS' or 'PROJCS' 
     467            if sref.GetAuthorityName(authority).upper() == 'EPSG': 
     468                epsg = int(sref.GetAuthorityCode(authority)) 
     469                srs = SpatialReference(epsg=epsg) 
     470        except (TypeError, ValueError): 
     471            pass 
     472 
    453473        g = ds.GetGeoTransform() 
    454474        size = (ds.RasterXSize, ds.RasterYSize) 
     
    464484        r = ((b[2] - b[0]) / size[0], (b[3] - b[1]) / size[1]) 
    465485        return {'typename': typename or self.typenames()[0],  
    466                 'srs': srs, 'bounds': b, 
     486                'srs': srs.toEPSG() or srs.tostring(), 'bounds': b, 
    467487                'bands': p, 'size': size, 'resolution': r} 
    468488 
  • PCL/trunk/PCL-GDAL/tests/testdiskfeatures.py

    r783 r930  
    6060        typenames = store.typenames() 
    6161        self.assert_(typenames == TYPENAMES, typenames) 
     62 
     63class PickleTest(unittest.TestCase): 
     64    """Test that PGFeatureStore can be pickled.""" 
     65 
     66    def test_picklesupport(self): 
     67        import pickle 
     68        from sets import Set 
     69        store = DiskFeatureStore(DISKSTORE) 
     70        typenames_before = Set(store.typenames()) 
     71        persisted = pickle.dumps(store) 
     72        del store 
     73        resurrected = pickle.loads(persisted) 
     74        self.assertEquals(typenames_before, Set(resurrected.typenames())) 
    6275 
    6376class StoreTest(unittest.TestCase): 
     
    191204        self.assertEqual(store.typenames(), ['raster.vrt']) 
    192205        self.assertEqual(store.info(), 
    193             {'srs': '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs', 
     206            {'srs': 'EPSG:4326', 
    194207             'bands': [['Band 1', 'Byte']], 
    195208             'bounds': (-8.0333333000000007, 49.233343899999994, 2.8333224999999995, 59.8333333),  
     
    207220        [unittest.makeSuite(klass) 
    208221         for klass 
    209          in (NewStoreTest, StoreTest, SourceTest, AccessTest, RasterTest
     222         in (NewStoreTest, StoreTest, SourceTest, AccessTest, RasterTest, PickleTest
    210223         ]) 
    211224