Beispiel #1
0
def rename_files(files, name=None):
    """
    Given a list of file paths for elevation files, this function will rename
    those files to the format required by the pyDEM package.

    This assumes a .tif extension.

    Parameters
    -----------
    files : list
        A list of strings of the paths to the elevation files that will be
        renamed
    name : str (optional)
        Default = None. A suffix to the filename. For example
        <filename>_suffix.tif

    Notes
    ------
    The files are renamed in the same directory as the original file locations
    """
    for fil in files:
        elev_file = GdalReader(file_name=fil)
        elev, = elev_file.raster_layers
        fn = get_fn(elev, name)
        del elev_file
        del elev
        fn = os.path.join(os.path.split(fil)[0], fn)
        os.rename(fil, fn)
        print "Renamed", fil, "to", fn
Beispiel #2
0
def get_test_data(test_num, NN, testdir='testtiff'):
    filenames = make_file_names(test_num, NN, testdir)
    if not os.path.exists(filenames['elev']):
        make_test_files(NN, testdir=testdir, testnum=test_num)
    elev_file = GdalReader(file_name=filenames['elev'])
    elev_data, = elev_file.raster_layers
    ang_file = GdalReader(file_name=filenames['ang'])
    ang_data, = ang_file.raster_layers
    if not os.path.exists(filenames['fel']):
        cmd = ('pitremove -z "%s" -fel "%s" ' % (filenames['elev'],
                                                 filenames['fel']))
        taudem._run(cmd)
    fel_file = GdalReader(file_name=filenames['fel'])
    fel_data,  = fel_file.raster_layers
    del elev_file
    del ang_file
    return elev_data, ang_data, fel_data
Beispiel #3
0
 def fill_max_elevations(self):
     max_elev = {}
     for fn in self.edges.keys():
         elev_file = GdalReader(file_name=fn)
         elev, = elev_file.raster_layers
         max_elev[fn] = np.nanmax(elev.raster_data)
         del elev_file  # close file
         del elev
     self.max_elev = max_elev
Beispiel #4
0
def case_real_data(x, y, filename='N43W-72_N44W-71_elev.tif', NN=None):
# def case_real_data(x, y, filename='N72W-112N73W-111_elev.tif', NN=None):
    if NN is None:
        NX, NY = x.shape
        NX0, NY0 = [0, 0]
    elif type(NN) == list:
        NX0, NX, NY0, NY = NN
    else:
        NX0, NX, NY0, NY = [0, NN, 0, NN]
    elev_file = GdalReader(file_name=filename)
    test_data, = elev_file.raster_layers
    raster = test_data.raster_data[NX0:NX, NY0:NY]
    del elev_file
    del test_data
    angle = -1 + 0 * raster
    return raster, angle
Beispiel #5
0
def mk_xy_latlon(N):
    raster = np.zeros((N, N))
    if os.path.exists('temp.tif'):
        os.remove('temp.tif')
    obj, driver = mk_geotiff_obj(raster, 'temp.tif')
    del obj
    del driver
    obj = GdalReader(file_name='temp.tif').raster_layers[0]
    dx, dy = mk_dx_dy_from_geotif_layer(obj)
    del obj
    os.remove('temp.tif')
    y = np.concatenate([[0], np.cumsum(dx)])
    x = np.concatenate([[0], np.cumsum(dy)])
    # Center it on zero
    x = x - (x.max() - x.min()) / 2.0
    y = y - (y.max() - y.min()) / 2.0
    scale = np.sqrt(x**2 + y**2).max()
    x = x / scale
    y = y / scale
    Y, X = np.meshgrid(y, x)

    return X, Y
Beispiel #6
0
    def __init__(self, fn, slice_, save_path, overwrite=False):
        self.fn = fn
        self.coords = parse_fn(fn)
        self.slice = slice_
        self.save_path = save_path
        self.post_fn = '_' + str(slice_).replace(' ', '').replace(',', '-')

        # When initialized we also have to create and initialize the files
        # that go with this edge
        self.fn_coords = self.get_fn('coords')
        self.fn_data = self.get_fn('data')
        self.fn_done = self.get_fn('done')
        self.fn_todo = self.get_fn('todo')

        # Open the elevation file and strip out the coordinates, then save init
        # data
        elev_file = GdalReader(file_name=fn)
        elev, = elev_file.raster_layers
        gc = elev.grid_coordinates
        del elev_file  # close file
        del elev  # make sure it's closed
        points = np.meshgrid(gc.x_axis, gc.y_axis)
        coordinates = np.column_stack([pts[slice_].ravel() for pts in points])
        # flip xy coordinates for regular grid interpolator
        coordinates = coordinates[:, ::-1]
        init_data = np.zeros(coordinates.shape[0], float)
        init_bool = np.zeros(coordinates.shape[0], bool)

        if not os.path.exists(self.fn_coords) and not overwrite:
            self.save_data(coordinates, 'coords')
        if not os.path.exists(self.fn_data) and not overwrite:
            self.save_data(init_data, 'data')
        if not os.path.exists(self.fn_done) and not overwrite:
            self.save_data(init_bool, 'done')
        if not os.path.exists(self.fn_todo) and not overwrite:
            self.save_data(~init_bool, 'todo')

        self.update_metrics()