def genRasterEnvelope(raster, outputShape): """ raster [string] workingDir [string] workingDirectory """ rasterName = os.path.splitext(os.path.split(raster)[-1])[0] minX, maxX, minY, maxY = fut.getRasterExtent(raster) epsg = fut.getRasterProjectionEPSG(raster) driver = ogr.GetDriverByName("ESRI Shapefile") data_source = driver.CreateDataSource(outputShape) srs = osr.SpatialReference() srs.ImportFromEPSG(int(epsg)) out_lyr = data_source.CreateLayer(rasterName, srs, geom_type=ogr.wkbPolygon) field_ext = ogr.FieldDefn("ext", ogr.OFTString) field_ext.SetWidth(24) out_lyr.CreateField(field_ext) #geom ul = (minX, maxY) ur = (maxX, maxY) lr = (maxX, minY) ll = (minX, minY) ring = ogr.Geometry(ogr.wkbLinearRing) ring.AddPoint(ul[0], ul[1]) ring.AddPoint(ur[0], ur[1]) ring.AddPoint(lr[0], lr[1]) ring.AddPoint(ll[0], ll[1]) ring.AddPoint(ul[0], ul[1]) # Create polygon poly = ogr.Geometry(ogr.wkbPolygon) poly.AddGeometry(ring) feature = ogr.Feature(out_lyr.GetLayerDefn()) feature.SetField("ext", "extent") feature.SetGeometry(poly) out_lyr.CreateFeature(feature) feature = data_source = None return outputShape
def createOutGrid(TileFolder, pattern, outputProjection, tileNameField, outGridPath): paths = getPaths(TileFolder, pattern) #paths = ['/work/theia/oso/sensorsDatas/S2/20152016//T30TVT/SENTINEL2A_20160729-112407-023_L2A_T30TVT_D_V1-0/SENTINEL2A_20160729-112407-023_L2A_T30TVT_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TWP/SENTINEL2A_20160726-111748-462_L2A_T30TWP_D_V1-0/SENTINEL2A_20160726-111748-462_L2A_T30TWP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TWS/SENTINEL2A_20160815-110803-010_L2A_T30TWS_D_V1-0/SENTINEL2A_20160815-110803-010_L2A_T30TWS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TWT/SENTINEL2A_20151229-111920-437_L2A_T30TWT_D_V1-0/SENTINEL2A_20151229-111920-437_L2A_T30TWT_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TXN/SENTINEL2A_20160723-110712-857_L2A_T30TXN_D_V1-0/SENTINEL2A_20160723-110712-857_L2A_T30TXN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TXP/SENTINEL2A_20160623-105858-730_L2A_T30TXP_D_V1-0/SENTINEL2A_20160623-105858-730_L2A_T30TXP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TXQ/SENTINEL2A_20160815-110803-010_L2A_T30TXQ_D_V1-0/SENTINEL2A_20160815-110803-010_L2A_T30TXQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TXR/SENTINEL2A_20160815-110803-010_L2A_T30TXR_D_V1-0/SENTINEL2A_20160815-110803-010_L2A_T30TXR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TXS/SENTINEL2A_20160716-110923-852_L2A_T30TXS_D_V1-0/SENTINEL2A_20160716-110923-852_L2A_T30TXS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TXT/SENTINEL2A_20151229-111920-437_L2A_T30TXT_D_V1-0/SENTINEL2A_20151229-111920-437_L2A_T30TXT_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TYN/SENTINEL2A_20160125-111611-703_L2A_T30TYN_D_V1-0/SENTINEL2A_20160125-111611-703_L2A_T30TYN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TYP/SENTINEL2A_20160204-110240-456_L2A_T30TYP_D_V1-0/SENTINEL2A_20160204-110240-456_L2A_T30TYP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TYQ/SENTINEL2A_20160723-110712-857_L2A_T30TYQ_D_V1-0/SENTINEL2A_20160723-110712-857_L2A_T30TYQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TYR/SENTINEL2A_20151226-111142-750_L2A_T30TYR_D_V1-0/SENTINEL2A_20151226-111142-750_L2A_T30TYR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TYS/SENTINEL2A_20160312-105037-460_L2A_T30TYS_D_V1-0/SENTINEL2A_20160312-105037-460_L2A_T30TYS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30TYT/SENTINEL2A_20151206-110834-178_L2A_T30TYT_D_V1-0/SENTINEL2A_20151206-110834-178_L2A_T30TYT_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UUU/SENTINEL2A_20160410-112358-413_L2A_T30UUU_D_V1-0/SENTINEL2A_20160410-112358-413_L2A_T30UUU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UVU/SENTINEL2A_20160719-112117-457_L2A_T30UVU_D_V1-0/SENTINEL2A_20160719-112117-457_L2A_T30UVU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UVV/SENTINEL2A_20160507-110656-458_L2A_T30UVV_D_V1-0/SENTINEL2A_20160507-110656-458_L2A_T30UVV_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UWA/SENTINEL2A_20160121-113008-064_L2A_T30UWA_D_V1-0/SENTINEL2A_20160121-113008-064_L2A_T30UWA_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UWU/SENTINEL2A_20151222-113332-762_L2A_T30UWU_D_V1-0/SENTINEL2A_20151222-113332-762_L2A_T30UWU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UWV/SENTINEL2A_20160709-112403-413_L2A_T30UWV_D_V1-0/SENTINEL2A_20160709-112403-413_L2A_T30UWV_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UXA/SENTINEL2A_20160507-110656-458_L2A_T30UXA_D_V1-0/SENTINEL2A_20160507-110656-458_L2A_T30UXA_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UXU/SENTINEL2A_20160417-111159-116_L2A_T30UXU_D_V1-0/SENTINEL2A_20160417-111159-116_L2A_T30UXU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UXV/SENTINEL2A_20160507-110656-458_L2A_T30UXV_D_V1-0/SENTINEL2A_20160507-110656-458_L2A_T30UXV_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UYA/SENTINEL2A_20151129-112140-218_L2A_T30UYA_D_V1-0/SENTINEL2A_20151129-112140-218_L2A_T30UYA_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UYU/SENTINEL2A_20151226-111142-750_L2A_T30UYU_D_V1-0/SENTINEL2A_20151226-111142-750_L2A_T30UYU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T30UYV/SENTINEL2A_20160112-110648-877_L2A_T30UYV_D_V1-0/SENTINEL2A_20160112-110648-877_L2A_T30UYV_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TCH/SENTINEL2A_20160401-105759-039_L2A_T31TCH_D_V1-0/SENTINEL2A_20160401-105759-039_L2A_T31TCH_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TCJ/SENTINEL2A_20160727-104250-774_L2A_T31TCJ_D_V1-0/SENTINEL2A_20160727-104250-774_L2A_T31TCJ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TCK/SENTINEL2A_20160312-105037-460_L2A_T31TCK_D_V1-0/SENTINEL2A_20160312-105037-460_L2A_T31TCK_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TCL/SENTINEL2A_20151203-110846-328_L2A_T31TCL_D_V1-0/SENTINEL2A_20151203-110846-328_L2A_T31TCL_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TCM/SENTINEL2A_20160102-110129-139_L2A_T31TCM_D_V1-0/SENTINEL2A_20160102-110129-139_L2A_T31TCM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TCN/SENTINEL2A_20160501-105310-197_L2A_T31TCN_D_V1-0/SENTINEL2A_20160501-105310-197_L2A_T31TCN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TDH/SENTINEL2A_20160816-104025-461_L2A_T31TDH_D_V1-0/SENTINEL2A_20160816-104025-461_L2A_T31TDH_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TDJ/SENTINEL2A_20160727-104250-774_L2A_T31TDJ_D_V1-0/SENTINEL2A_20160727-104250-774_L2A_T31TDJ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TDK/SENTINEL2A_20160607-104026-455_L2A_T31TDK_D_V1-0/SENTINEL2A_20160607-104026-455_L2A_T31TDK_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TDL/SENTINEL2A_20151230-105153-392_L2A_T31TDL_D_V1-0/SENTINEL2A_20151230-105153-392_L2A_T31TDL_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TDM/SENTINEL2A_20160322-105248-343_L2A_T31TDM_D_V1-0/SENTINEL2A_20160322-105248-343_L2A_T31TDM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TDN/SENTINEL2A_20160717-104026-462_L2A_T31TDN_D_V1-0/SENTINEL2A_20160717-104026-462_L2A_T31TDN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TEH/SENTINEL2A_20160425-103025-458_L2A_T31TEH_D_V1-0/SENTINEL2A_20160425-103025-458_L2A_T31TEH_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TEJ/SENTINEL2A_20160806-104026-455_L2A_T31TEJ_D_V1-0/SENTINEL2A_20160806-104026-455_L2A_T31TEJ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TEK/SENTINEL2A_20160816-104025-461_L2A_T31TEK_D_V1-0/SENTINEL2A_20160816-104025-461_L2A_T31TEK_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TEL/SENTINEL2A_20160806-104026-455_L2A_T31TEL_D_V1-0/SENTINEL2A_20160806-104026-455_L2A_T31TEL_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TEM/SENTINEL2A_20151230-105153-392_L2A_T31TEM_D_V1-0/SENTINEL2A_20151230-105153-392_L2A_T31TEM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TEN/SENTINEL2A_20151203-105818-575_L2A_T31TEN_D_V1-0/SENTINEL2A_20151203-105818-575_L2A_T31TEN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TFH/SENTINEL2A_20151217-103953-944_L2A_T31TFH_D_V1-0/SENTINEL2A_20151217-103953-944_L2A_T31TFH_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TFJ/SENTINEL2A_20160727-104250-774_L2A_T31TFJ_D_V1-0/SENTINEL2A_20160727-104250-774_L2A_T31TFJ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TFK/SENTINEL2A_20160717-104833-511_L2A_T31TFK_D_V1-0/SENTINEL2A_20160717-104833-511_L2A_T31TFK_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TFL/SENTINEL2A_20160816-104025-461_L2A_T31TFL_D_V1-0/SENTINEL2A_20160816-104025-461_L2A_T31TFL_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TFM/SENTINEL2A_20160707-104025-456_L2A_T31TFM_D_V1-0/SENTINEL2A_20160707-104025-456_L2A_T31TFM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TFN/SENTINEL2A_20151223-105843-962_L2A_T31TFN_D_V1-0/SENTINEL2A_20151223-105843-962_L2A_T31TFN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TGH/SENTINEL2A_20160724-103229-121_L2A_T31TGH_D_V1-0/SENTINEL2A_20160724-103229-121_L2A_T31TGH_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TGJ/SENTINEL2A_20160415-103022-461_L2A_T31TGJ_D_V1-0/SENTINEL2A_20160415-103022-461_L2A_T31TGJ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TGK/SENTINEL2A_20160408-104020-456_L2A_T31TGK_D_V1-0/SENTINEL2A_20160408-104020-456_L2A_T31TGK_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TGL/SENTINEL2A_20160205-103556-319_L2A_T31TGL_D_V1-0/SENTINEL2A_20160205-103556-319_L2A_T31TGL_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TGM/SENTINEL2A_20160528-104248-160_L2A_T31TGM_D_V1-0/SENTINEL2A_20160528-104248-160_L2A_T31TGM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31TGN/SENTINEL2A_20160205-103556-319_L2A_T31TGN_D_V1-0/SENTINEL2A_20160205-103556-319_L2A_T31TGN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UCP/SENTINEL2A_20151203-105818-575_L2A_T31UCP_D_V1-0/SENTINEL2A_20151203-105818-575_L2A_T31UCP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UCQ/SENTINEL2A_20151206-110834-178_L2A_T31UCQ_D_V1-0/SENTINEL2A_20151206-110834-178_L2A_T31UCQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UCR/SENTINEL2A_20151229-111920-437_L2A_T31UCR_D_V1-0/SENTINEL2A_20151229-111920-437_L2A_T31UCR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UCS/SENTINEL2A_20160125-111611-703_L2A_T31UCS_D_V1-0/SENTINEL2A_20160125-111611-703_L2A_T31UCS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UDP/SENTINEL2A_20160102-110129-139_L2A_T31UDP_D_V1-0/SENTINEL2A_20160102-110129-139_L2A_T31UDP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UDQ/SENTINEL2A_20160125-111611-703_L2A_T31UDQ_D_V1-0/SENTINEL2A_20160125-111611-703_L2A_T31UDQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UDR/SENTINEL2A_20151226-111142-750_L2A_T31UDR_D_V1-0/SENTINEL2A_20151226-111142-750_L2A_T31UDR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UDS/SENTINEL2A_20160125-111611-703_L2A_T31UDS_D_V1-0/SENTINEL2A_20160125-111611-703_L2A_T31UDS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UEP/SENTINEL2A_20160717-104026-462_L2A_T31UEP_D_V1-0/SENTINEL2A_20160717-104026-462_L2A_T31UEP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UEQ/SENTINEL2A_20160720-105547-946_L2A_T31UEQ_D_V1-0/SENTINEL2A_20160720-105547-946_L2A_T31UEQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UER/SENTINEL2A_20151206-110834-178_L2A_T31UER_D_V1-0/SENTINEL2A_20151206-110834-178_L2A_T31UER_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UES/SENTINEL2A_20160305-110109-717_L2A_T31UES_D_V1-0/SENTINEL2A_20160305-110109-717_L2A_T31UES_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UFP/SENTINEL2A_20160720-105547-946_L2A_T31UFP_D_V1-0/SENTINEL2A_20160720-105547-946_L2A_T31UFP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UFQ/SENTINEL2A_20160511-105343-672_L2A_T31UFQ_D_V1-0/SENTINEL2A_20160511-105343-672_L2A_T31UFQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UFR/SENTINEL2A_20160607-104026-455_L2A_T31UFR_D_V1-0/SENTINEL2A_20160607-104026-455_L2A_T31UFR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UFS/SENTINEL2A_20160508-104027-456_L2A_T31UFS_D_V1-0/SENTINEL2A_20160508-104027-456_L2A_T31UFS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UGP/SENTINEL2A_20160408-104020-456_L2A_T31UGP_D_V1-0/SENTINEL2A_20160408-104020-456_L2A_T31UGP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UGQ/SENTINEL2A_20160816-104025-461_L2A_T31UGQ_D_V1-0/SENTINEL2A_20160816-104025-461_L2A_T31UGQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T31UGR/SENTINEL2A_20160119-105107-606_L2A_T31UGR_D_V1-0/SENTINEL2A_20160119-105107-606_L2A_T31UGR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TLP/SENTINEL2A_20160405-103019-462_L2A_T32TLP_D_V1-0/SENTINEL2A_20160405-103019-462_L2A_T32TLP_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TLQ/SENTINEL2A_20160803-103724-960_L2A_T32TLQ_D_V1-0/SENTINEL2A_20160803-103724-960_L2A_T32TLQ_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TLR/SENTINEL2A_20160326-103406-538_L2A_T32TLR_D_V1-0/SENTINEL2A_20160326-103406-538_L2A_T32TLR_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TLS/SENTINEL2A_20160126-104630-775_L2A_T32TLS_D_V1-0/SENTINEL2A_20160126-104630-775_L2A_T32TLS_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TLT/SENTINEL2A_20160126-104630-775_L2A_T32TLT_D_V1-0/SENTINEL2A_20160126-104630-775_L2A_T32TLT_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TMM/SENTINEL2A_20160711-102030-066_L2A_T32TMM_D_V1-0/SENTINEL2A_20160711-102030-066_L2A_T32TMM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TMN/SENTINEL2A_20160728-101603-978_L2A_T32TMN_D_V1-0/SENTINEL2A_20160728-101603-978_L2A_T32TMN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TNL/SENTINEL2A_20160728-101603-978_L2A_T32TNL_D_V1-0/SENTINEL2A_20160728-101603-978_L2A_T32TNL_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TNM/SENTINEL2A_20160718-101028-464_L2A_T32TNM_D_V1-0/SENTINEL2A_20160718-101028-464_L2A_T32TNM_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32TNN/SENTINEL2A_20160708-101602-980_L2A_T32TNN_D_V1-0/SENTINEL2A_20160708-101602-980_L2A_T32TNN_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32ULU/SENTINEL2A_20160126-104630-775_L2A_T32ULU_D_V1-0/SENTINEL2A_20160126-104630-775_L2A_T32ULU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32ULV/SENTINEL2A_20151207-103733-673_L2A_T32ULV_D_V1-0/SENTINEL2A_20151207-103733-673_L2A_T32ULV_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32UMU/SENTINEL2A_20151207-103733-673_L2A_T32UMU_D_V1-0/SENTINEL2A_20151207-103733-673_L2A_T32UMU_D_V1-0_FRE_B2.tif', '/work/theia/oso/sensorsDatas/S2/20152016//T32UMV/SENTINEL2A_20160714-103025-460_L2A_T32UMV_D_V1-0/SENTINEL2A_20160714-103025-460_L2A_T32UMV_D_V1-0_FRE_B2.tif'] driver = ogr.GetDriverByName("ESRI Shapefile") try: if os.path.exists(outGridPath): driver.DeleteDataSource(outGridPath) output = driver.CreateDataSource(outGridPath) except ValueError: raise Exception("Could not create output datasource " + outGridPath) srs = osr.SpatialReference() srs.ImportFromEPSG(int(outputProjection)) layer = output.CreateLayer(outGridPath.split("/")[-1].replace(".shp", ""), geom_type=ogr.wkbPolygon, srs=srs) layer.CreateField(ogr.FieldDefn(tileNameField, ogr.OFTString)) layerDef = layer.GetLayerDefn() if layer is None: raise Exception("Could not create output layer") for currentTile in paths: currentProjection = fu.getRasterProjectionEPSG(currentTile) minX, maxX, minY, maxY = fu.getRasterExtent(currentTile) upperL = (minX, maxY) upperR = (maxX, maxY) lowerL = (minX, minY) lowerR = (maxX, minY) upperL_out = converCoord(upperL, int(currentProjection), int(outputProjection)) upperR_out = converCoord(upperR, int(currentProjection), int(outputProjection)) lowerL_out = converCoord(lowerL, int(currentProjection), int(outputProjection)) lowerR_out = converCoord(lowerR, int(currentProjection), int(outputProjection)) TileName = getTileNameFromRaster(currentTile) addTileToGrid(upperL_out, upperR_out, lowerR_out, lowerL_out, layer, layerDef, tileNameField, TileName) output.Destroy()
def checkmethodstats(rasters, paramstats, nbbands): """Store list of requested statistics in dict and check validity of in put rasters Parameters ---------- rasters : list list of rasters to analyse paramstats : list list of statistics to compute (e.g. [[1,'stats'], [2, 'rate']] or ['val']) nbbands : int number of input rasters or bands of input raster Return ---------- paramstats : dict list of statistics to compute (e.g. {1:'stats', 2:'rate'}) """ # Format requested statistics if isinstance(paramstats, list): # List of methods (bash) if ':' in paramstats[0]: paramstats = dict([(x.split(':')[0], x.split(':')[1]) for x in paramstats]) # Unique method without band / raster number elif len(paramstats) == 1: # Build statistics method dictionary tmpdict = {} for idx in range(nbbands): tmpdict[idx + 1] = str(paramstats[0]) paramstats = tmpdict # Check statistics methods validity for keys in paramstats: if 'stats_' in paramstats[keys]: paramstats[keys] = 'stats' if paramstats[keys] not in ('stats', 'statsmaj', 'rate', 'val'): raise Exception('The method %s is not implemented' % (paramstats[0])) # requested stats and band number ? maxband = max([int(x) for x in list(paramstats.keys())]) if len(rasters) != 1: if nbbands < maxband: raise Exception("Band ids in requested stats and number of input rasters "\ "or bands number of input raster do not correspond") # same extent and resolution of input rasters ? listres = [] listextent = [] if len(rasters) != 1: for raster in rasters: listres.append(abs(fut.getRasterResolution(raster)[0])) listextent.append(fut.getRasterExtent(raster)) if listextent[1:] != listextent[:-1]: raise Exception("Input rasters must have same extent") if listres[1:] != listres[:-1]: raise Exception("Input rasters must have same spatial resolution") return paramstats
def mosaicFromShape(rasters, shape, rasterOut, workingDir=None): """ usage : from a shape clip rasters and mosaic them (upper left priority). IN rasters [list of string] : path to rasters shape [string] : vector pathg rasterOut [string] : output path workingDir [string] OUT """ #sort input raster by origin (upperLeft) rasters_p = sorted([(raster, fut.getRasterExtent(raster)) for raster in rasters], key=upperLeft)[::-1] outputDirectory = os.path.split(rasterOut)[0] wDir = outputDirectory tmp_files_vec = [] tmp_files_raster = [] if workingDir: wDir = workingDir for raster, coordinates in rasters_p: rasterName = os.path.splitext(os.path.split(raster)[-1])[0] raster_footPrint = os.path.join(wDir, rasterName + ".shp") if os.path.exists(raster_footPrint): while os.path.exists(raster_footPrint): raster_footPrint = raster_footPrint.replace( ".shp", "_" + str(random.randint(1, 1000)) + ".shp") #raster footPrint genRasterEnvelope(raster, raster_footPrint) tmp_files_vec.append(raster_footPrint) clip = raster_footPrint.replace(".shp", "_Clip.shp") clip_raster = raster_footPrint.replace(".shp", "_Clip.tif") inter = genIntersectionShape(raster_footPrint, shape, clip) cmd = "gdalwarp -crop_to_cutline -cutline " + clip + " " + raster + " " + clip_raster run(cmd) tmp_files_raster.append(clip_raster) tmp_files_vec.append(clip) #mosaic using gdal_merge.py, the last image will be copied over earlier ones rasters_clip = " ".join(tmp_files_raster[::-1]) cmd = "gdal_merge.py -o " + rasterOut + " -n 0 " + rasters_clip run(cmd) #clean tmp files for vec in tmp_files_vec: fut.removeShape(vec.replace(".shp", ""), [".prj", ".shp", ".dbf", ".shx"]) for img in tmp_files_raster: os.remove(img) if workingDir: shutil.copy(rasterOut, outputDirectory)