Пример #1
0
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
Пример #2
0
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
Пример #4
0
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)