예제 #1
0
def _get_valid_output_index(source_geo_def, target_geo_def, target_lons, 
                            target_lats, reduce_data, radius_of_influence):
    """Find indices of reduced output data"""
    
    valid_output_index = np.ones(target_lons.size, dtype=np.bool)
    
    if reduce_data:
        if isinstance(source_geo_def, (geometry.GridDefinition, 
                                         geometry.AreaDefinition)) and \
             isinstance(target_geo_def, geometry.CoordinateDefinition):
            #Resampling from grid to swath
            lonlat_boundary = source_geo_def.get_boundary_lonlats()
            valid_output_index = \
                data_reduce.get_valid_index_from_lonlat_boundaries(
                                            lonlat_boundary[0],
                                            lonlat_boundary[1], 
                                            target_lons, 
                                            target_lats, 
                                            radius_of_influence)
            valid_output_index = valid_output_index.astype(np.bool)
            
    #Remove illegal values
    valid_out = ((target_lons >= -180) & (target_lons <= 180) & 
                  (target_lats <= 90) & (target_lats >= -90))
    
    #Combine reduced and legal values
    valid_output_index = (valid_output_index & valid_out)
    
    return valid_output_index
예제 #2
0
def _get_valid_input_index(source_geo_def, target_geo_def, reduce_data, 
                           radius_of_influence, nprocs=1):
    """Find indices of reduced inputput data"""
    
    source_lons, source_lats = source_geo_def.get_lonlats(nprocs=nprocs)
    source_lons = source_lons.ravel()
    source_lats = source_lats.ravel()
    
    if source_lons.size == 0 or source_lats.size == 0:
        raise ValueError('Cannot resample empty data set')
    elif source_lons.size != source_lats.size or \
            source_lons.shape != source_lats.shape:
        raise ValueError('Mismatch between lons and lats')
    
    #Remove illegal values
    valid_data = ((source_lons >= -180) & (source_lons <= 180) & 
                  (source_lats <= 90) & (source_lats >= -90))
    valid_input_index = np.ones(source_geo_def.size, dtype=np.bool)
    
    if reduce_data:
        #Reduce dataset 
        if (isinstance(source_geo_def, geometry.CoordinateDefinition) and 
            isinstance(target_geo_def, (geometry.GridDefinition, 
                                       geometry.AreaDefinition))) or \
           (isinstance(source_geo_def, (geometry.GridDefinition, 
                                        geometry.AreaDefinition)) and
            isinstance(target_geo_def, (geometry.GridDefinition, 
                                        geometry.AreaDefinition))):
            #Resampling from swath to grid or from grid to grid
            lonlat_boundary = target_geo_def.get_boundary_lonlats()
            valid_input_index = \
                data_reduce.get_valid_index_from_lonlat_boundaries(
                                            lonlat_boundary[0],
                                            lonlat_boundary[1], 
                                            source_lons, source_lats, 
                                            radius_of_influence)
    
    #Combine reduced and legal values
    valid_input_index = (valid_data & valid_input_index)
    
    
    if(isinstance(valid_input_index, np.ma.core.MaskedArray)):
        #Make sure valid_input_index is not a masked array
        valid_input_index = valid_input_index.filled(False)
    
    return valid_input_index, source_lons, source_lats