Beispiel #1
0
    def test_get_projection(self):
#        ip = Inspect(self.daymet,variable='tmax')
#        ip.__repr__()
        
        ds = Dataset(self.daymet)
        proj = projection.get_projection(ds)
        self.assertEqual(proj.sr.ExportToProj4(),
         '+proj=lcc +lat_1=25 +lat_2=60 +lat_0=42.5 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ')
Beispiel #2
0
 def test_polar_stereographic(self):
     proj = get_projection(nc.Dataset(self.polar_stereographic.uri,'r'))
     self.assertEqual(type(proj),PolarStereographic)
     
     ocgis.env.OVERWRITE = True
     ops = ocgis.OcgOperations(dataset=self.polar_stereographic,output_format='shp',
                               snippet=True)
     ret = ops.execute()
     print(ret)
Beispiel #3
0
    def test_polar_stereographic(self):
        proj = get_projection(nc.Dataset(self.polar_stereographic.uri, 'r'))
        self.assertEqual(type(proj), PolarStereographic)

        ocgis.env.OVERWRITE = True
        ops = ocgis.OcgOperations(dataset=self.polar_stereographic,
                                  output_format='shp',
                                  snippet=True)
        ret = ops.execute()
        print(ret)
Beispiel #4
0
    def test_get_projection(self):
        #        ip = Inspect(self.daymet,variable='tmax')
        #        ip.__repr__()

        ds = Dataset(self.daymet)
        proj = projection.get_projection(ds)
        self.assertEqual(
            proj.sr.ExportToProj4(),
            '+proj=lcc +lat_1=25 +lat_2=60 +lat_0=42.5 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '
        )
Beispiel #5
0
    def test_rotated_pole(self):
        ocgis.env.OVERWRITE = True
        proj = get_projection(nc.Dataset(self.rotated_pole.uri,'r'))
        self.assertEqual(type(proj),RotatedPole)
        
#        ops = ocgis.OcgOperations(dataset=self.rotated_pole,snippet=True,output_format='shp')
#        ret = ops.execute()
        
#        ops = ocgis.OcgOperations(dataset=self.rotated_pole,snippet=True,output_format='shp',
#                                  geom=[-97.74278,30.26694])
#        ret = ops.execute()
        
        ops = ocgis.OcgOperations(dataset=self.rotated_pole,snippet=True,output_format='shp',
                                  geom='state_boundaries',agg_selection=True)
        ret = ops.execute()
Beispiel #6
0
def generate_projection_report(folder):
    '''
    Generate a projection report for the NARCCAP data.
    
    :param folder: Path to the folder containing the NARCCAP example data.
    :type folder: str
    :returns: Path to the report file.
    :rtype: str
    '''
    report = Report()
    files = os.listdir(folder)
    files = filter(lambda x: x.endswith('.nc'), files)
    files = map(lambda x: os.path.join(folder, x), files)
    for f in files:
        report.add('Filename: {0}'.format(os.path.split(f)[1]),
                   add_break=False)
        rootgrp = nc.Dataset(f, 'r')
        try:
            projection = get_projection(rootgrp)
            report.add('OpenClimateGIS Projection Class: {0}'.format(
                projection.__class__))
            report.add('OpenClimateGIS Computed PROJ4 String: {0}'.format(
                projection.proj4_str))
            try:
                ref_var = rootgrp.variables[projection.variable_name]
                report.add('NetCDF Variable/Attribute Dump:')
                report.add(projection.variable_name, indent=1)
                for attr in ref_var.ncattrs():
                    report.add('{0}: {1}'.format(attr,
                                                 ref_var.getncattr(attr)),
                               indent=2)
            except KeyError:
                ## likely WGS84
                if isinstance(projection, WGS84):
                    continue
                else:
                    raise
            finally:
                report.add_break()
                report.add('-' * 89)
                report.add_break()
        finally:
            rootgrp.close()
    report.write('/tmp/foo.txt')
    import webbrowser
    webbrowser.open('/tmp/foo.txt')
Beispiel #7
0
    def test_rotated_pole(self):
        ocgis.env.OVERWRITE = True
        proj = get_projection(nc.Dataset(self.rotated_pole.uri, 'r'))
        self.assertEqual(type(proj), RotatedPole)

        #        ops = ocgis.OcgOperations(dataset=self.rotated_pole,snippet=True,output_format='shp')
        #        ret = ops.execute()

        #        ops = ocgis.OcgOperations(dataset=self.rotated_pole,snippet=True,output_format='shp',
        #                                  geom=[-97.74278,30.26694])
        #        ret = ops.execute()

        ops = ocgis.OcgOperations(dataset=self.rotated_pole,
                                  snippet=True,
                                  output_format='shp',
                                  geom='state_boundaries',
                                  agg_selection=True)
        ret = ops.execute()
Beispiel #8
0
def generate_projection_report(folder):
    '''
    Generate a projection report for the NARCCAP data.
    
    :param folder: Path to the folder containing the NARCCAP example data.
    :type folder: str
    :returns: Path to the report file.
    :rtype: str
    '''
    report = Report()
    files = os.listdir(folder)
    files = filter(lambda x: x.endswith('.nc'),files)
    files = map(lambda x: os.path.join(folder,x),files)
    for f in files:
        report.add('Filename: {0}'.format(os.path.split(f)[1]),add_break=False)
        rootgrp = nc.Dataset(f,'r')
        try:
            projection = get_projection(rootgrp)
            report.add('OpenClimateGIS Projection Class: {0}'.format(projection.__class__))
            report.add('OpenClimateGIS Computed PROJ4 String: {0}'.format(projection.proj4_str))
            try:
                ref_var = rootgrp.variables[projection.variable_name]
                report.add('NetCDF Variable/Attribute Dump:')
                report.add(projection.variable_name,indent=1)
                for attr in ref_var.ncattrs():
                    report.add('{0}: {1}'.format(attr,ref_var.getncattr(attr)),indent=2)
            except KeyError:
                ## likely WGS84
                if isinstance(projection,WGS84):
                    continue
                else: raise
            finally:
                report.add_break()
                report.add('-'*89)
                report.add_break()
        finally:
            rootgrp.close()
    report.write('/tmp/foo.txt')
    import webbrowser;webbrowser.open('/tmp/foo.txt')
Beispiel #9
0
    def __init__(self,rootgrp,target_var,overload={}):
        self.target_var = target_var
        self._meta = NcMetadata(rootgrp)
        self._dim_map = self._get_dimension_map_(rootgrp)

        interfaces = [LevelInterface,TemporalInterface,RowInterface,ColumnInterface]
        for interface in interfaces:
            try:
                argspec = inspect.getargspec(interface.__init__)
                overloads = argspec.args[-len(argspec.defaults):]
                kwds = dict(zip(overloads,[overload.get(o) for o in overloads]))
            except TypeError:
                kwds = {}
            try:
                setattr(self,interface._name,interface(self,**kwds))
            except DummyLevelEncountered:
                setattr(self,interface._name,None)
        
        ## check for proj4 string to initialize a projection
        s_proj = overload.get('s_proj')
        if s_proj is None:
            projection = get_projection(rootgrp)
#            projection = WGS84()
        else:
            raise(NotImplementedError)
        
        ## get the geometric abstraction
        s_abstraction = overload.get('s_abstraction')
        if self._row.bounds is None:
            warn('no bounds found for spatial dimensions. abstracting to point.')
            s_abstraction = 'point'
#            else:
#                s_abstraction = 'polygon'
        if s_abstraction == 'polygon':
            self.spatial = SpatialInterfacePolygon(self._row,self._col,projection)
        else:
            self.spatial = SpatialInterfacePoint(self._row,self._col,projection)
Beispiel #10
0
 def test_oblique_mercator(self):
     proj = get_projection(nc.Dataset(self.oblique_mercator.uri,'r'))
     self.assertEqual(type(proj),NarccapObliqueMercator)
Beispiel #11
0
 def test_oblique_mercator(self):
     proj = get_projection(nc.Dataset(self.oblique_mercator.uri, 'r'))
     self.assertEqual(type(proj), NarccapObliqueMercator)
Beispiel #12
0
    def _load_(cls, gi, subset_by=None):
        if subset_by is not None:
            raise (NotImplementedError)
        else:
            row = gi._load_axis_(NcRowDimension)
            column = gi._load_axis_(NcColumnDimension)

            ## check for overloaded projections
            if gi._s_proj is None:
                projection = get_projection(gi._ds)
            else:
                projection = gi._s_proj

            if isinstance(projection, RotatedPole):
                import csv
                import itertools
                import subprocess
                import tempfile

                class ProjDialect(csv.excel):
                    lineterminator = '\n'
                    delimiter = '\t'

                f = tempfile.NamedTemporaryFile()
                writer = csv.writer(f, dialect=ProjDialect)
                _row = row.value
                _col = column.value
                real_idx = []
                shp = (row.shape[0], column.shape[0])
                uid = np.arange(1, (shp[0] * shp[1]) + 1,
                                dtype=int).reshape(*shp)
                uid = np.ma.array(data=uid, mask=False)
                for row_idx, col_idx in itertools.product(
                        range(row.value.shape[0]),
                        range(column.value.shape[0])):
                    real_idx.append([col_idx, row_idx])
                    writer.writerow([_col[col_idx], _row[row_idx]])
                f.flush()
                cmd = projection._trans_proj.split(' ')
                cmd.append(f.name)
                cmd = ['proj', '-f', '"%.6f"', '-m', '57.2957795130823'] + cmd
                capture = subprocess.check_output(cmd)
                f.close()
                coords = capture.split('\n')
                new_coords = []
                for ii, coord in enumerate(coords):
                    coord = coord.replace('"', '')
                    coord = coord.split('\t')
                    try:
                        coord = map(float, coord)
                    ## likely empty string
                    except ValueError:
                        if coord[0] == '':
                            continue
                        else:
                            raise
                    new_coords.append(coord)
                new_coords = np.array(new_coords)
                real_idx = np.array(real_idx)
                new_row = new_coords[:, 1].reshape(*shp)
                new_col = new_coords[:, 0].reshape(*shp)
                new_real_row_idx = real_idx[:, 1].reshape(*shp)
                new_real_column_idx = real_idx[:, 0].reshape(*shp)

                grid = NcGridMatrixDimension(new_row, new_col,
                                             new_real_row_idx,
                                             new_real_column_idx, uid)
                ret = cls(grid=grid,
                          projection=projection,
                          abstraction='point')
            else:
                ret = cls(row=row,
                          column=column,
                          projection=projection,
                          abstraction=gi._abstraction)
        return (ret)
Beispiel #13
0
 def _load_(cls,gi,subset_by=None):
     if subset_by is not None:
         raise(NotImplementedError)
     else:
         row = gi._load_axis_(NcRowDimension)
         column = gi._load_axis_(NcColumnDimension)
         
         ## check for overloaded projections
         if gi._s_proj is None:
             projection = get_projection(gi._ds)
         else:
             projection = gi._s_proj
         
         if isinstance(projection,RotatedPole):
             import csv
             import itertools
             import subprocess
             import tempfile
             class ProjDialect(csv.excel):
                 lineterminator = '\n'
                 delimiter = '\t'
             f = tempfile.NamedTemporaryFile()
             writer = csv.writer(f,dialect=ProjDialect)
             _row = row.value
             _col = column.value
             real_idx = []
             shp = (row.shape[0],column.shape[0])
             uid = np.arange(1,(shp[0]*shp[1])+1,dtype=int).reshape(*shp)
             uid = np.ma.array(data=uid,mask=False)
             for row_idx,col_idx in itertools.product(range(row.value.shape[0]),range(column.value.shape[0])):
                 real_idx.append([col_idx,row_idx])
                 writer.writerow([_col[col_idx],_row[row_idx]])
             f.flush()
             cmd = projection._trans_proj.split(' ')
             cmd.append(f.name)
             cmd = ['proj','-f','"%.6f"','-m','57.2957795130823'] + cmd
             capture = subprocess.check_output(cmd)
             f.close()
             coords = capture.split('\n')
             new_coords = []
             for ii,coord in enumerate(coords):
                 coord = coord.replace('"','')
                 coord = coord.split('\t')
                 try:
                     coord = map(float,coord)
                 ## likely empty string
                 except ValueError:
                     if coord[0] == '':
                         continue
                     else:
                         raise
                 new_coords.append(coord)
             new_coords = np.array(new_coords)
             real_idx = np.array(real_idx)
             new_row = new_coords[:,1].reshape(*shp)
             new_col = new_coords[:,0].reshape(*shp)
             new_real_row_idx = real_idx[:,1].reshape(*shp)
             new_real_column_idx = real_idx[:,0].reshape(*shp)
             
             grid = NcGridMatrixDimension(new_row,new_col,new_real_row_idx,new_real_column_idx,uid)
             ret = cls(grid=grid,projection=projection,abstraction='point')
         else:
             ret = cls(row=row,column=column,projection=projection,
                       abstraction=gi._abstraction)
     return(ret)