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
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) ])
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)
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,
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