def rasterize_list_poly(list_poly, in_met, i): print('Poly stack number ' + str(i + 1)) # create input image gt, proj, npix_x, npix_y = in_met drv = gdal.GetDriverByName('MEM') dst = drv.Create('', npix_x, npix_y, 1, gdal.GDT_Float32) sp = dst.SetProjection(proj) sg = dst.SetGeoTransform(gt) band = dst.GetRasterBand(1) band.SetNoDataValue(0) band.Fill(0, 0) del sp, sg img = GeoImg(dst) out_density = np.zeros(np.shape(img.img)) srs = osr.SpatialReference() srs.ImportFromWkt(proj) for j, poly in enumerate(list_poly): print('Poly ' + str(j + 1) + ' out of ' + str(len(list_poly))) ds_shp = ot.create_mem_shp(poly, srs) mask = ot.geoimg_mask_on_feat_shp_ds(ds_shp, img) out_density[mask] += 1 return out_density
def worldwide_coverage_density(list_poly, fn_out, res=0.05, nproc=1): #worldwide raster in lat/lon proj xmin = -180 ymax = 90 gt = (xmin, res, 0, ymax, 0, -res) npix_x = int(360 / res) npix_y = int(180 / res) proj = osr.SpatialReference() proj.ImportFromEPSG(4326) ds_out = gdal.GetDriverByName('GTiff').Create(fn_out, npix_x, npix_y, 1, gdal.GDT_Int16) ds_out.SetGeoTransform(gt) ds_out.SetProjection(proj.ExportToWkt()) band = ds_out.GetRasterBand(1) band.SetNoDataValue(0) band.Fill(0, 0) img = GeoImg(ds_out) out_density = np.zeros(np.shape(img.img)) if nproc == 1: for i, poly in enumerate(list_poly): print('Rasterizing poly number ' + str(i + 1) + ' in ' + str(len(list_poly))) ds_shp = ot.create_mem_shp(poly, proj) mask = ot.geoimg_mask_on_feat_shp_ds(ds_shp, img) out_density[mask] += 1 else: print('Using ' + str(nproc) + ' processors...') # speed up things with multiprocessing pool = mp.Pool(nproc, maxtasksperchild=1) in_met = (img.gt, img.proj_wkt, img.npix_x, img.npix_y) pack_size = int(np.ceil(len(list_poly) / nproc)) argsin_packs = [{ 'list_poly': list_poly[i:min(i + pack_size, len(list_poly))], 'in_met': in_met, 'i': k } for k, i in enumerate(np.arange(0, len(list_poly), pack_size))] outputs = pool.map(wrapper_rasterize, argsin_packs, chunksize=1) pool.close() pool.join() for output in outputs: out_density += output ds_out.GetRasterBand(1).WriteArray(out_density) ds_out = None
def out_of_poly_mask(geoimg, poly_coords): poly = ot.poly_from_coords(inter_poly_coords(poly_coords)) srs = osr.SpatialReference() srs.ImportFromEPSG(4326) # put in a memory vector ds_shp = ot.create_mem_shp(poly, srs) return ot.geoimg_mask_on_feat_shp_ds(ds_shp, geoimg)
poly = feature.GetGeometryRef() area = feature.GetField('Area') break layer.ResetReading() list_inters = get_footprints_inters_ext(list_files,poly,epsg_base,use_l1a_met=False) print('Found '+str(len(list_inters))+ ' DEMs out of '+str(len(list_files))+' intersecting glacier '+gla[1]) for fn_inters in list_inters: print('Working on file:'+fn_inters) tmp_img = GeoImg(fn_inters) mask_feat = ot.geoimg_mask_on_feat_shp_ds(ds_shp, tmp_img, layer_name=layer_name, feat_id='RGIId', feat_val=gla[0]) # nb_px_mask = np.count_nonzero(mask_feat) nb_px_valid = np.count_nonzero(~np.isnan(tmp_img.img[mask_feat])) area_valid = nb_px_valid*tmp_img.dx**2/1000000 cov = area_valid/area*100 print('DEM ' + fn_inters + ' has intersection of ' + str(cov)) if cov > 5.: list_final.append(os.path.basename(fn_inters)) list_cov.append(cov) list_date.append(tmp_img.datetime) mt.create_zip_from_flist([fn_inters],os.path.join(gla_dir,os.path.splitext(os.path.basename(fn_inters))[0]+'.zip')) df = pd.DataFrame() df = df.assign(dem_name=list_final,perc_valid_coverage=list_cov,date=list_date) df.to_csv(os.path.join(gla_dir,'setsm_dem_coverage.csv'))
os.path.basename(fn_dhdt))[0].split('_') sens_early = split_fn[-2] sens_late = split_fn[-4] date_early = split_fn[-1] date_late = split_fn[-3] site = split_fn[1] for rgiid_valid in list_rgiid_valid: print('Working on ' + rgiid_valid) dhdt.img[np.abs(dhdt.img) > 15] = np.nan mask = ot.geoimg_mask_on_feat_shp_ds(ds_shp, dhdt, layer_name=layer_name, feat_id='RGIId', feat_val=rgiid_valid) mean, err, perc, area = ddem_hypso(dhdt.img, np.ones(np.shape(dhdt.img)), mask, dhdt.dx) df_tmp = pd.DataFrame() df_tmp = df_tmp.assign( rgiid=[rgiid_valid], dhdt=[mean], err_dhdt=[err], area=[area], perc_meas=[perc], sensor_early=[sens_early],