def getLatLon(self, grid_coords, **args): data_file = self.df grid_file = self.gf # if grid_file: # lat = grid_file['lat'] # lon = grid_file['lon'] # if PlotType.validCoords( lat, lon ): # return self.processCoordinates( lat, lon ) Var = self.var axis_ids = self.getAxisIds(Var) if axis_ids: try: if grid_file: lon = grid_file(axis_ids[0], squeeze=1) lat = grid_file(axis_ids[1], squeeze=1) else: lon = data_file(axis_ids[0], squeeze=1) lat = data_file(axis_ids[1], squeeze=1) except cdms2.error.CDMSError: print >> sys.stderr, "Can't find lat/lon coordinate variables in file(s)." return None, None if PlotType.validCoords(lat, lon): return self.processCoordinates(lat, lon) elif hasattr(Var, "stagger"): stagger = Var.stagger.strip() lat = data_file("XLAT_%s" % stagger, squeeze=1) lon = data_file("XLONG_%s" % stagger, squeeze=1) if PlotType.validCoords(lat, lon): return self.processCoordinates(lat, lon) lat = Var.getLatitude() lon = Var.getLongitude() if PlotType.validCoords(lat, lon): return self.processCoordinates(lat.getValue(), lon.getValue()) lon_coord = grid_coords[0] lon = data_file(lon_coord, squeeze=1) if lon_coord else None lat_coord = grid_coords[1] lat = data_file(lat_coord, squeeze=1) if lat_coord else None if PlotType.validCoords(lat, lon): return self.processCoordinates(lat, lon) axis_ids = [] longitude_names = ['longitude', 'column longitude'] latitude_names = ['latitude', 'column latitude'] for axis_spec in Var.getDomain(): if not (axis_spec[0].isLevel() or axis_spec[0].isTime()): axis_ids.append(axis_spec[0].id) for dset in [data_file, grid_file]: if dset: for cvar_name in dset.variables: cvar = dset[cvar_name] cvar_axis_ids = cvar.getAxisIds() if (len(cvar_axis_ids) == 1) and (cvar_axis_ids[0] in axis_ids): if hasattr(cvar, 'long_name'): if (cvar.long_name.lower() in longitude_names): lon = dset(cvar.id, squeeze=1) elif (cvar.long_name.lower() in latitude_names): lat = dset(cvar.id, squeeze=1) if hasattr(cvar, 'standard_name'): if (cvar.standard_name.lower() in longitude_names): lon = dset(cvar.id, squeeze=1) elif (cvar.standard_name.lower() in latitude_names): lat = dset(cvar.id, squeeze=1) if PlotType.validCoords(lat, lon): return self.processCoordinates(lat, lon) print >> sys.stdout, "Error, Can't find grid axes!" return None, None
def getLatLon( self, grid_coords, **args ): data_file = self.df grid_file = self.gf # if grid_file: # lat = grid_file['lat'] # lon = grid_file['lon'] # if PlotType.validCoords( lat, lon ): # return self.processCoordinates( lat, lon ) Var = self.var axis_ids = self.getAxisIds( Var ) if axis_ids: try: if grid_file: lon = grid_file( axis_ids[0], squeeze=1 ) lat = grid_file( axis_ids[1], squeeze=1 ) else: lon = data_file( axis_ids[0], squeeze=1 ) lat = data_file( axis_ids[1], squeeze=1 ) except cdms2.error.CDMSError: print>>sys.stderr, "Can't find lat/lon coordinate variables in file(s)." return None, None if PlotType.validCoords( lat, lon ): return self.processCoordinates( lat, lon ) elif hasattr( Var, "stagger" ): stagger = Var.stagger.strip() lat = data_file( "XLAT_%s" % stagger, squeeze=1 ) lon = data_file( "XLONG_%s" % stagger, squeeze=1 ) if PlotType.validCoords( lat, lon ): return self.processCoordinates( lat, lon ) lat = Var.getLatitude() lon = Var.getLongitude() if PlotType.validCoords( lat, lon ): return self.processCoordinates( lat.getValue(), lon.getValue() ) lon_coord = grid_coords[0] lon = data_file( lon_coord, squeeze=1 ) if lon_coord else None lat_coord = grid_coords[1] lat = data_file( lat_coord, squeeze=1 ) if lat_coord else None if PlotType.validCoords( lat, lon ): return self.processCoordinates( lat, lon ) axis_ids = [] longitude_names = [ 'longitude', 'column longitude' ] latitude_names = [ 'latitude', 'column latitude' ] for axis_spec in Var.getDomain(): if not ( axis_spec[0].isLevel() or axis_spec[0].isTime() ): axis_ids.append( axis_spec[0].id ) for dset in [ data_file, grid_file ]: if dset: for cvar_name in dset.variables: cvar = dset[ cvar_name ] cvar_axis_ids = cvar.getAxisIds() if ( len( cvar_axis_ids ) == 1 ) and ( cvar_axis_ids[0] in axis_ids ): if hasattr( cvar, 'long_name' ): if ( cvar.long_name.lower() in longitude_names ): lon = dset( cvar.id, squeeze=1 ) elif ( cvar.long_name.lower() in latitude_names ): lat = dset( cvar.id, squeeze=1 ) if hasattr( cvar, 'standard_name' ): if ( cvar.standard_name.lower() in longitude_names ): lon = dset( cvar.id, squeeze=1 ) elif ( cvar.standard_name.lower() in latitude_names ): lat = dset( cvar.id, squeeze=1 ) if PlotType.validCoords( lat, lon ): return self.processCoordinates( lat, lon ) print>>sys.stdout, "Error, Can't find grid axes!" return None, None