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
Ejemplo n.º 3
0
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'))
Ejemplo n.º 5
0
                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],