示例#1
0
    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
示例#2
0
    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