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 ')
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)
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)
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 ' )
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()
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')
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()
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')
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)
def test_oblique_mercator(self): proj = get_projection(nc.Dataset(self.oblique_mercator.uri,'r')) self.assertEqual(type(proj),NarccapObliqueMercator)
def test_oblique_mercator(self): proj = get_projection(nc.Dataset(self.oblique_mercator.uri, 'r')) self.assertEqual(type(proj), NarccapObliqueMercator)
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)
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)