def make_elev_ang(testnum, NN, raster, angle, uca=None, testdir='testtiff'): # Convert masked array to filled array raster = raster.filled() angle = angle.filled() filename = make_file_names(testnum, NN, testdir) try: if not os.path.exists(testdir): os.makedirs(testdir) if not os.path.exists(filename['elev']): elev, driver = mk_geotiff_obj(raster, filename['elev']) del driver del elev print "Created", filename['elev'] ang, driver = mk_geotiff_obj(angle, filename['ang']) del ang del driver print "Created", filename['ang'] if not os.path.exists(filename['uca']) and uca is not None: ucaf, driver = mk_geotiff_obj(uca, filename['uca']) del ucaf del driver print "Created", filename['uca'] else: print "Already exists or None", filename['uca'] finally: ucaf = None elev = None ang = None driver = None
def mk_test_multifile(testnum, NN, testdir, nx_grid=3, ny_grid=4, nx_overlap=16, ny_overlap=32, lat=[46, 45], lon=[-73, -72]): """ Written to make test case for multi-file edge resolution. """ path = os.path.split(make_file_names(testnum, NN, os.path.join( testdir, 'chunks'))['elev'])[0] try: os.makedirs(path) except: pass def _get_chunk_edges(NN, chunk_size, chunk_overlap): left_edge = np.arange(0, NN - chunk_overlap, chunk_size) left_edge[1:] -= chunk_overlap right_edge = np.arange(0, NN - chunk_overlap, chunk_size) right_edge[:-1] = right_edge[1:] + chunk_overlap right_edge[-1] = NN right_edge = np.minimum(right_edge, NN) return left_edge, right_edge elev_data, ang_data, fel_data = get_test_data(testnum, NN) try: raster = fel_data.raster_data except: raster = elev_data.raster_data ni, nj = raster.shape top_edge, bottom_edge = _get_chunk_edges(ni, ni // ny_grid, ny_overlap) left_edge, right_edge = _get_chunk_edges(nj, nj // nx_grid, nx_overlap) # gc = elev_data.grid_coordinates # lat = gc.y_axis # lon = gc.x_axis lat = np.linspace(lat[0], lat[1], ni) lon = np.linspace(lon[0], lon[1], nj) count = 0 for te, be in zip(top_edge, bottom_edge): for le, re in zip(left_edge, right_edge): count += 1 fn = os.path.join(path, get_fn_from_coords((lat[be-1], lon[le], lat[te], lon[re-1]), 'elev')) print count, ": [%d:%d, %d:%d]" % (te, be, le, re), \ '(lat, lon) = (%g to %g, %g to %g)' % (lat[te], lat[be-1], lon[le], lon[re-1]), \ 'min,max = (%g to %g, %g to %g)' % (lat.min(), lat.max(), lon.min(), lon.max()) mk_geotiff_obj(raster[te:be, le:re], fn, bands=1, gdal_data_type=gdal.GDT_Float32, lat=[lat[te], lat[be-1]], lon=[lon[le], lon[re-1]])
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