Example #1
0
def area_intersect_geom_listpoly(list_tiles, list_poly, geom, type_geom):

    #WARNING: reprojected polygons are updated in the original list

    list_tiles_inters = []
    list_area_inters = []
    list_tot_inters = []

    for i in range(len(list_tiles)):

        # progress_bar(float(i+1),float(len(list_tiles)),20)

        if type_geom == 'Polygon':

            tmpintersect = geom.Intersection(
                list_poly[i])  #polygon intersection with extent

            if not tmpintersect.IsEmpty():

                list_tiles_inters.append(
                    list_tiles[i]
                )  #add tile to list if intersection is not empty

        elif type_geom == 'GeometryCollection':

            # reproj multi-polygon
            lat, lon = SRTMGL1_naming_to_latlon(list_tiles[i])
            epsg, utm_zone = latlon_to_UTM(lat + 0.5, lon + 0.5)

            source = osr.SpatialReference()
            source.ImportFromEPSG(4326)

            target = osr.SpatialReference()
            target.ImportFromEPSG(int(epsg))

            transform = osr.CoordinateTransformation(source, target)
            tile_area = 0

            # tmpclip = extent_geom.Clip(list_poly)

            for g in geom:

                tmpintersect = g.Intersection(
                    list_poly[i])  #polygon intersection with extent

                if not tmpintersect.IsEmpty():
                    tmpintersect.Transform(transform)
                    tile_area = tile_area + tmpintersect.GetArea()

            if tile_area > 0:
                tmppoly = list_poly[i]
                tmppoly.Transform(transform)
                tot_area = tmppoly.GetArea()
                list_tiles_inters.append(
                    list_tiles[i]
                )  #add tile to list if intersection is not empty
                list_area_inters.append(tile_area)
                list_tot_inters.append(tot_area)

    return list_tiles_inters, list_area_inters, list_tot_inters
Example #2
0
def extend_tile_raster_list(list_raster_in, extend_factor, extend_epsg,
                            list_raster_out, nodata_val):

    list_poly_extended = []
    list_poly = []
    list_epsg = []

    for raster_in in list_raster_in:
        tmp_extent, tmp_proj_wkt = extent_rast(raster_in)
        tmp_poly = poly_from_extent(tmp_extent)

        #detect UTM EPSG of central raster
        transform = coord_trans_wkt_or_EPSG(True, tmp_proj_wkt, False,
                                            extend_epsg)
        tmp_poly.Transform(transform)
        center_lon, center_lat = get_poly_centroid(tmp_poly)
        tmp_epsg, _ = latlon_to_UTM(center_lat, center_lon)
        tmp_extent_proj = extent_from_poly(tmp_poly)

        list_poly.append(tmp_poly)
        list_epsg.append(int(tmp_epsg))

        tmp_extended_extent = [
            tmp_extent_proj[0] - extend_factor[0],
            tmp_extent_proj[1] - extend_factor[1],
            tmp_extent_proj[2] + extend_factor[0],
            tmp_extent_proj[3] + extend_factor[1]
        ]
        list_poly_extended.append(poly_from_extent(tmp_extended_extent))

    list_list_inters_extended = []
    for poly in list_poly_extended:
        list_inters = inters_list_poly_with_poly(list_poly, poly)
        list_list_inters_extended.append(list_inters)

    for raster_in in list_raster_in:

        ind = list_raster_in.index(raster_in)
        list_inters_extended = list_list_inters_extended[ind]

        print('FILE NUMBER ' + str(ind) + ': ' + list_raster_out[ind])
        list_inters_raster = [
            list_raster_in[list_poly.index(inters_extended)]
            for inters_extended in list_inters_extended
        ]
        print(list_inters_raster)
        merge_rast_list(list_inters_raster,
                        list_raster_out[ind],
                        tgt_EPSG=list_epsg[ind],
                        nodata_in=nodata_val,
                        nodata_out=nodata_val)
def write_csv(list_tiles, list_area, list_tot, out_csv):

    with open(out_csv, 'wb') as csvfile:
        writer = csv.writer(csvfile, delimiter=',')
        writer.writerow([
            'Tile_name', 'UTM zone', 'Tot_area_intersecting [km2]',
            'Tot_area_tile [km2]'
        ])

        for i in range(len(list_tiles)):
            lat, lon = SRTMGL1_naming_to_latlon(list_tiles[i])
            _, utm_zone = latlon_to_UTM(lat + 0.5, lon + 0.5)

            writer.writerow([
                str(list_tiles[i]), utm_zone,
                str(list_area[i] / 1000000),
                str(list_tot[i] / 1000000)
            ])
Example #4
0
def buffer_shp_fn(fn_shp_in, fn_shp_out, buffer, meters=True):

    geom, proj_wkt = read_geom_from_shp(fn_shp_in)
    if meters:
        #project to UTM of centroid by default
        transform = coord_trans_wkt_or_EPSG(True, proj_wkt, False, 4326)
        geom.Transform(transform)
        center_lon, center_lat = get_poly_centroid(geom)
        epsg, utm_zone = latlon_to_UTM(center_lat, center_lon)
        transform2 = coord_trans_wkt_or_EPSG(False, 4326, False, int(epsg))
        geom.Transform(transform2)
        srs = osr.SpatialReference()
        srs.ImportFromEPSG(int(epsg))
    else:
        srs = osr.SpatialReference()
        srs.ImportFromWkt(proj_wkt)

    buff = geom.Buffer(buffer)

    write_poly_to_shp(buff, fn_shp_out, srs=srs)
Example #5
0
            lat, lon = SRTMGL1_naming_to_latlon(tile)
            lat += 0.5
            lon += 0.5
            ext_lon, _ = extended_factor_latitude_L1A(
                lat, abs(along_track_Terra(lat)))

            list_utm = []
            list_epsg = []
            possible_lons = np.arange(lon - ext_lon, lon + ext_lon, 0.1)
            for lons in possible_lons:
                if lons < -180:
                    lons += 360
                elif lons > 180:
                    lons -= 360
                epsg, utm = latlon_to_UTM(lat, lons)

                if utm not in list_utm:
                    list_utm.append(utm)
                    list_epsg.append(epsg)

            for utm in list_utm:
                utm_dir = os.path.join(ref_dir, utm)
                tgt_epsg = list_epsg[list_utm.index(utm)]
                print('Possible UTM zone: ' + utm)

                make_pdirs(utm_dir)

                pref_dem_out = os.path.join(utm_dir, 'TDX_90m_05hem')
                TDX_90m_tile(tdx_dir,
                             tile,
Example #6
0
def warp_defaultUTM(raster_in,
                    raster_out,
                    format_out='Gtiff',
                    src_EPSG=None,
                    tgt_EPSG=None,
                    tgt_res=None,
                    nodata_in=-9999,
                    nodata_out=-9999,
                    interp_method='bilinear'):

    #default is automatic source proj to UTM of extent centroid, same resolution, with -9999 nodata value and bilinear interpolation
    if tgt_EPSG is None:

        extent, proj_wkt = extent_rast(raster_in)

        poly = poly_from_extent(extent)

        transform = coord_trans_wkt_or_EPSG(True, proj_wkt, False, 4326)

        poly.Transform(transform)

        center_lon, center_lat = get_poly_centroid(poly)

        epsg, utm_zone = latlon_to_UTM(center_lat, center_lon)
        print('Projecting tile ' + raster_in + ' to UTM zone: ' + utm_zone +
              ' corresponding to ESPG: ' + epsg)
        dst_SRS = 'EPSG:' + epsg
    else:
        epsg = str(tgt_EPSG)
        dst_SRS = 'EPSG:' + epsg
        print('Projecting tile ' + raster_in + ' to ESPG: ' + str(tgt_EPSG))

    if tgt_res is None:
        xRes = None
        yRes = None
    else:
        xRes = tgt_res[0]
        yRes = tgt_res[1]

    if src_EPSG is None:
        src_SRS = None
    else:
        src_SRS = 'EPSG:' + str(src_EPSG)

    # warp, see options at: https://gdal.org/python/osgeo.gdal-module.html#Warp
    opts = gdal.WarpOptions(format=format_out,
                            xRes=xRes,
                            yRes=yRes,
                            srcSRS=src_SRS,
                            dstSRS=dst_SRS,
                            srcNodata=nodata_in,
                            dstNodata=nodata_out,
                            resampleAlg=interp_method)
    ds_out = gdal.Warp(raster_out, raster_in, options=opts)

    if format_out == 'MEM':
        # if in-memory datasource, return object
        return ds_out
    else:
        # otherwise, close datasource
        ds_out = None