示例#1
0
    def list_operators():
        """This function provides a Python dictionary with all SNAP operators.

        Args:
            None.

        Returns
            Python dictionary with all SNAP operators.

        Raises:
            None.
        """
        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

        op_spi_it = GPF.getDefaultInstance().getOperatorSpiRegistry(
        ).getOperatorSpis().iterator()

        snap_operators = []

        while op_spi_it.hasNext():

            op_spi = op_spi_it.next()

            snap_operators.append(op_spi.getOperatorAlias())

        return snap_operators
示例#2
0
def topophaseRemoval(product):

    if debug >= 2:
        print(cyan + "topophaseRemoval() : " + bold + green +
              "Run to SNAP... " + endC)

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'TopoPhaseRemoval'

    # Set des parametres
    parameters = HashMap()

    parameters.put("Orbit Interpolation Degree", 3)
    parameters.put("Digital Elevation Model", "SRTM 1Sec HGT (Auto Download)")
    parameters.put("Tile Extension[%]", 100)
    parameters.put("Output topographic phase band", True)
    parameters.put("Output elevation band", False)

    if debug >= 2:
        print(parameters)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)

    if debug >= 2:
        print(cyan + "topophaseRemoval() : " + bold + green + "Done... " +
              endC)

    return result
示例#3
0
def backGeocoding(product):

    if debug >= 2:
        print(cyan + "backGeocoding() : " + bold + green + "Run to SNAP... " +
              endC)

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'Back-Geocoding'

    # Set des parametres
    parameters = HashMap()

    parameters.put("Digital Elevation Model", "SRTM 1Sec HGT (Auto Download)")
    parameters.put("DEM Resampling Method", "BICUBIC_INTERPOLATION")
    parameters.put("Resampling Type", "BISINC_5_POINT_INTERPOLATION")
    parameters.put("Mask out areas with no elevation", True)
    parameters.put("Output Deramp and Demod Phase", False)

    if debug >= 2:
        print(parameters)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)

    if debug >= 2:
        print(cyan + "backGeocoding() : " + bold + green + "Done... " + endC)

    return result
示例#4
0
def resample(DIR, band, resolution):
    """
    resamples a band of a SENTINEL product to a given target resolution

    :param DIR: base directory of Sentinel2 directory tree
    :param band: band name (e.g. B4)
    :param resolution: target resolution in meter (e.g 10)

    :return: resampled band
    """

    from snappy import GPF

    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    HashMap = jpy.get_type('java.util.HashMap')
    BandDescriptor = jpy.get_type(
        'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor')

    parameters = HashMap()
    parameters.put('targetResolution', resolution)
    parameters.put('upsampling', 'Bicubic')
    parameters.put('downsampling', 'Mean')
    parameters.put('flagDownsampling', 'FlagMedianAnd')
    parameters.put('resampleOnPyramidLevels', True)

    product = ProductIO.readProduct(DIR)
    product = GPF.createProduct('Resample', parameters, product)

    rsp_band = product.getBand(band)

    return rsp_band
示例#5
0
    def describe_operators():
        """This function provides a Python dictionary with all SNAP operators.

        Args:
            None.

        Returns
            Python dictionary with all SNAP operators.

        Raises:
            None.
        """

        desc_dict = {}
        
        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

        op_spi_it = GPF.getDefaultInstance().getOperatorSpiRegistry().getOperatorSpis().iterator()

        while op_spi_it.hasNext():

            op_spi = op_spi_it.next()

            alias = op_spi.getOperatorDescriptor().getAlias()
            description = op_spi.getOperatorDescriptor().getDescription()
        
            desc_dict[alias] = description
            print(
                "{} - {}".format(
                    alias, description
                )
            )

        return desc_dict
示例#6
0
def interferogram(product):

    if debug >= 2:
        print(cyan + "interferogram() : " + bold + green + "Run to SNAP... " +
              endC)

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'Interferogram'

    # Set des parametres
    parameters = HashMap()

    parameters.put("Subtract flat-earth phase", True)
    parameters.put("Degree of \"Flat Earth\" polynomial", 5)
    parameters.put("Number of \"Flat Earth\" estimation points", 501)
    parameters.put("Orbit interpolation degree", 3)
    parameters.put("Include coherence estimation", True)
    parameters.put("Square Pixel", False)
    parameters.put("Independent Window Sizes", False)
    parameters.put("Coherence Azimuth Window Size", 10)
    parameters.put("Coherence Range Window Size", 10)

    if debug >= 2:
        print(parameters)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)

    if debug >= 2:
        print(cyan + "interferogram() : " + bold + green + "Done... " + endC)

    return result
def topsarSplit(product):

    if debug >= 2:
        print(cyan + "applyingOrbitFile() : " + bold + green + "Run to SNAP... " + endC )

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'TOPSAR-Split'

    # Set des parametres
    parameters = HashMap()
    op_spi = GPF.getDefaultInstance().getOperatorSpiRegistry().getOperatorSpi(operator)
    op_params = op_spi.getOperatorDescriptor().getParameterDescriptors()
    for param in op_params:
        if debug >= 2:
            print(cyan + "topsarSplit() : " + bold + green + str(param.getName()) + " : " + str(param.getDefaultValue()) + endC)
        parameters.put(param.getName(), param.getDefaultValue())
    parameters.put('subswath', 'IW1')
    parameters.put('selectedPolarisations', 'VV')

    if debug >= 2:
        print(parameters)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)

    if debug >= 2:
        print(cyan + "topsarSplit() : " + bold + green + "Done... " + endC)

    return result
示例#8
0
    def _band_math(self, product, name, expression):

        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
        HashMap = jpy.get_type('java.util.HashMap')

        BandDescriptor = jpy.get_type(
            'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor')

        targetBand = BandDescriptor()
        targetBand.name = name
        targetBand.type = 'float32'
        targetBand.expression = expression

        bands = jpy.array(
            'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor', 1)
        bands[0] = targetBand

        parameters = HashMap()
        parameters.put('targetBands', bands)

        productMap = HashMap()
        if isinstance(product, list):
            for ind in range(len(product)):
                print('p{}'.format(ind + 1))
                productMap.put('p{}'.format(ind + 1), product[ind])
            result = GPF.createProduct('BandMaths', parameters, productMap)
        else:
            result = GPF.createProduct('BandMaths', parameters, product)

        return result
    def subset(product, borderRectInGeoCoor):
        from snappy import jpy
        from snappy import ProductIO
        from snappy import GPF
        from snappy import HashMap

        xmin = borderRectInGeoCoor[0]
        ymin = borderRectInGeoCoor[1]
        xmax = borderRectInGeoCoor[2]
        ymax = borderRectInGeoCoor[3]

        p1 = '%s %s' % (xmin, ymin)
        p2 = '%s %s' % (xmin, ymax)
        p3 = '%s %s' % (xmax, ymax)
        p4 = '%s %s' % (xmax, ymin)
        wkt = "POLYGON((%s, %s, %s, %s, %s))" % (p1, p2, p3, p4, p1)
        WKTReader = jpy.get_type('com.vividsolutions.jts.io.WKTReader')
        geom = WKTReader().read(wkt)

        HashMap = jpy.get_type('java.util.HashMap')
        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

        parameters = HashMap()
        parameters.put('copyMetadata', True)
        parameters.put('geoRegion', geom)
        parameters.put('outputImageScaleInDb', False)
        subset = GPF.createProduct('Subset', parameters, product)
        return subset
示例#10
0
def topsarDeburst(product):

    if debug >= 2:
        print(cyan + "topsarDeburst() : " + bold + green + "Run to SNAP... " +
              endC)

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'TOPSAR-Deburst'

    # Set des parametres
    parameters = HashMap()

    parameters.put("Polarisations", "VV")

    if debug >= 2:
        print(parameters)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)

    if debug >= 2:
        print(cyan + "topsarDeburst() : " + bold + green + "Done... " + endC)

    return result
示例#11
0
def goldsteinPhasefiltering(product):

    if debug >= 2:
        print(cyan + "goldsteinPhasefiltering() : " + bold + green +
              "Run to SNAP... " + endC)

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'GoldsteinPhaseFiltering'

    # Set des parametres
    parameters = HashMap()

    parameters.put("Adaptive Filter Exponent in(0,1]:", 1.0)
    parameters.put("FFT Size", 64)
    parameters.put("Window Size", 3)
    parameters.put("Use coherence mask", False)
    parameters.put("Coherence Threshold in[0,1]:", 0.2)

    if debug >= 2:
        print(parameters)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)

    if debug >= 2:
        print(cyan + "goldsteinPhasefiltering() : " + bold + green +
              "Done... " + endC)

    return result
示例#12
0
    def __init__(self):
        # HashMap
        #           Key-Value pairs.
        #           https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
        self.HashMap = jpy.get_type('java.util.HashMap')

        # Get snappy Operators
        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
示例#13
0
def classify(prepros_folder):
    for file in os.listdir(prepros_folder):

        ### Folder, date & timestamp
        classification = rootpath + "\\classification"
        scene_name = str(prepros_folder.split("\\")[X])[:32]  # [X] element of filepath, change this to match scene name. [:32] first caracters of element
        print("scene_name:", scene_name)
        output_folder = os.path.join(classification, scene_name)
        print("output_folder:", output_folder)
        polarization = str(file)[46:48] # polarization from filename

        if not os.path.exists(output_folder):
            os.mkdir(output_folder)

        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
        HashMap = snappy.jpy.get_type('java.util.HashMap')
        gc.enable()

        sentinel_1 = ProductIO.readProduct(os.path.join(prepros_folder, file))

        res = [20, 50]  # parameters for CFAR
        for r in res:
            resolution = r

            gd_window = resolution * 12.0
            bg_window = resolution * 37.0

            # AdaptiveThresholding (Constant False Alarm Rate CFAR)
            parameters = HashMap()
            parameters.put('targetWindowSizeInMeter', resolution)
            parameters.put('guardWindowSizeInMeter', gd_window)
            parameters.put('backgroundWindowSizeInMeter', bg_window)
            parameters.put('pfa', 6.0)

            target_1 = GPF.createProduct("AdaptiveThresholding", parameters, sentinel_1)
            parameters = None

            # Subset (extracting classification band)
            parameters = HashMap()
            parameters.put('bandNames', 'Sigma0_' + polarization + '_ship_bit_msk')

            outfile = output_folder + "\\" + scene_name + "_" + polarization + "_cfar_" + str(resolution) + "m"
            target_2 = GPF.createProduct("Subset", parameters, target_1)
            ProductIO.writeProduct(target_2, outfile, 'GeoTIFF-BigTIFF', pm)

            # Classification to vector
            ds = gdal.Open(str(outfile + ".tif"))

            rasterband = ds.GetRasterBand(1)

            dst_layername = outfile + "_Iceberg_outline"
            drv = ogr.GetDriverByName("GeoJSON")
            dst_ds = drv.CreateDataSource(dst_layername + ".geojson")
            dest_srs = ogr.osr.SpatialReference()
            dest_srs.ImportFromEPSG(4326)
            dst_layer = dst_ds.CreateLayer(dst_layername, dest_srs)

            gdal.Polygonize(rasterband, rasterband, dst_layer, -1, [], callback=None) # (input, mask, dest_layer,,,) 
示例#14
0
def bandMathSnap(input_dim,
                 output_file,
                 expression_list,
                 format_file='float32'):

    if debug >= 2:
        print(cyan + "bandmathSnap() : " + bold + green +
              "Import Dim to SNAP : " + endC + input_dim)

    # Info input file
    product = ProductIO.readProduct(input_dim)
    width = product.getSceneRasterWidth()
    height = product.getSceneRasterHeight()
    name = product.getName()
    description = product.getDescription()
    band_names = product.getBandNames()

    if debug >= 2:
        print(cyan + "bandmathSnap() : " + bold + green +
              "Product: %s, %d x %d pixels, %s" %
              (name, width, height, description) + endC)
        print(cyan + "bandmathSnap() : " + bold + green + "Bands:   %s" %
              (list(band_names)) + endC)

    # Instance de GPF
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    # Def operateur SNAP
    operator = 'BandMaths'
    BandDescriptor = jpy.get_type(
        'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor')
    targetBands = jpy.array(
        'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor',
        len(expression_list))

    # Get des expressions d'entréées
    i = 0
    for expression in expression_list:
        targetBand = BandDescriptor()
        targetBand.name = 'band_' + str(i + 1)
        targetBand.type = format_file
        targetBand.expression = expression
        targetBands[i] = targetBand
        i += 1

    # Set des parametres
    parameters = HashMap()
    parameters.put('targetBands', targetBands)

    # Get snappy Operators
    result = GPF.createProduct(operator, parameters, product)
    ProductIO.writeProduct(result, output_file, 'BEAM-DIMAP')

    if debug >= 2:
        print(cyan + "bandmathSnap() : " + bold + green + "Writing Done : " +
              endC + str(output_file))

    return result
示例#15
0
    def extract_values(self, file):
        if not exists(self.plots):
            mkdir(self.plots)
        coords = []
        with open(file, 'r') as f:
            for line in f:
                line = line.replace('\n', '')
                coords.append([float(x) for x in line.split(' ')])

        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
        HashMap = jpy.get_type('java.util.HashMap')

        Coords = jpy.array('org.esa.snap.pixex.Coordinate', len(coords))
        Coord = jpy.get_type('org.esa.snap.pixex.Coordinate')
        for ind, coord in enumerate(coords):
            c = Coord('Coord{}'.format(ind), coord[0], coord[1], None)
            Coords[ind] = c

        parameters = HashMap()
        parameters.put('exportBands', True)
        parameters.put('exportTiePoints', False)
        parameters.put('exportMasks', False)
        parameters.put('coordinates', Coords)
        parameters.put('outputDir', '.')

        pre = self._extract_values(parameters, self.product_pre)
        post = self._extract_values(parameters, self.product_post)
        waves = pre.meta['comments'][-1].replace('\t', ' ')
        waves = waves.replace('Wavelength:', '').split(' ')
        waves = filter(lambda x: x != '', waves)
        waves = [float(x) for x in waves]
        waves = filter(lambda x: x != 0, waves)
        bands = ['B{}'.format(ind) for ind in range(1, 9)]
        bands += ['B8A', 'B9']
        bands += ['B{}'.format(ind) for ind in range(11, 13)]
        print(pre.colnames)
        print(post.colnames)

        for ind in range(len(pre)):
            f, ax = plt.subplots()
            ax.set_xlabel('Wavelength (nm)')
            ax.set_ylabel('dl')

            radiances = list(pre[bands][ind])
            ax.plot(waves, radiances, color='g', label='pre')
            ax.scatter(waves, radiances, color='g')

            radiances = list(post[bands][ind])
            ax.plot(waves, radiances, color='b', label='post')
            ax.scatter(waves, radiances, color='b')

            lat = pre['Latitude'][ind]
            lon = pre['Longitude'][ind]
            ax.set_title("{}, {}".format(lat, lon))
            plt.legend()
            save = "{}/{}.pdf".format(self.plots, pre['Name'][ind])
            f.savefig(save, bbox_inches="tight")
示例#16
0
def listParams(operator_name):
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
    op_spi = GPF.getDefaultInstance().getOperatorSpiRegistry().getOperatorSpi(
        operator_name)
    print('Op name:', op_spi.getOperatorDescriptor().getName())
    print('Op alias:', op_spi.getOperatorDescriptor().getAlias())
    param_Desc = op_spi.getOperatorDescriptor().getParameterDescriptors()
    for param in param_Desc:
        print(param.getName())
示例#17
0
def do_resampling (source):
    print ('\tResampling ...')
    HashMap = jpy.get_type('java.util.HashMap')
    parameters = HashMap()
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
    parameters.put('targetResolution', 10)

    output = GPF.createProduct('Resample', parameters, source)
    return output
def c2rcc_params():
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
    op_spi = GPF.getDefaultInstance().getOperatorSpiRegistry().getOperatorSpi('c2rcc.msi')
    print(dir(op_spi))
    print('Op name:', op_spi.getOperatorDescriptor().getName())
    print('Op alias:', op_spi.getOperatorDescriptor().getAlias())
    param_Desc = op_spi.getOperatorDescriptor().getParameterDescriptors()
    for param in param_Desc:
        print(param.getName(), "or", param.getAlias())
示例#19
0
def subset(product, x, y, width, heigth, toPrint=True):
    # subset of the Sentinel-1 GRD product by specify a rectangle whose top most left corner is defined by x and y coordinates
    HashMap = jpy.get_type('java.util.HashMap')
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
    parameters = HashMap()
    parameters.put('copyMetadata', True)
    parameters.put('region', "%s,%s,%s,%s" % (x, y, width, height))
    subset = GPF.createProduct('Subset', parameters, product)
    if toPrint:
        print("Bands:   %s" % (list(subset.getBandNames())))
    return subset
示例#20
0
def do_biophysical_parameter (source):
    print ('\tBiophysical Parameters ...')
    HashMap = jpy.get_type('java.util.HashMap')
    parameters = HashMap()
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
    parameters.put('targetResolution', 10)
    parameters.put('computeLAI', True)
    ##parameters.put('computeFcover', True)

    output = GPF.createProduct('BiophysicalOp', parameters, source)
    return output
def Subset(data, x, y, w, h):

    print('Subsetting the image...')

    HashMap = jpy.get_type('java.util.HashMap')
    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    parameters = HashMap()
    parameters.put('copyMetadata', True)
    parameters.put('region', "%s,%s,%s,%s" % (x, y, w, h))

    return GPF.createProduct('Subset', parameters, data)
def ApplyOrbitFile(data):

    print('Aplying Orbit File...')

    parameters = HashMap()

    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    parameters.put('orbitType', 'Sentinel Precise (Auto Download)')
    parameters.put('polyDegree', '3')
    parameters.put('continueOnFail', 'false')

    return GPF.createProduct('Apply-Orbit-File', parameters, data)
示例#23
0
def BandMathList(stack):
    product = ProductIO.readProduct(stack)
    band_names = product.getBandNames()

    GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

    BandDescriptor = jpy.get_type(
        'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor')

    bandlist = list(band_names)
    #targetBands = list()
    x = 0
    y = 1
    bandlength = len(bandlist)
    runs = (bandlength - 1)
    targetBands = jpy.array(
        'org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor', runs)
    for i in bandlist:
        while y <= runs:
            #print('{}_minus_{}'.format(bandlist[x], bandlist[y]))
            #targetBand1 = '{}_minus_{}'.format(bandlist[x], bandlist[y])
            targetBand1 = BandDescriptor()
            targetBand1.name = '{}_minus_{}'.format(bandlist[x], bandlist[y])
            targetBand1.type = 'float32'
            targetBand1.expression = '(({} - {})<(-2))? 255 : 0'.format(
                bandlist[x], bandlist[y])

            print("Writing Band {} : {}_minus_{}".format(
                x, bandlist[x], bandlist[y]))
            #targetBands.append(targetBand1)
            targetBands[x] = targetBand1

            x = x + 1
            y = y + 1
    """targetBand1 = BandDescriptor()
    targetBand1.name = 'first_{}_minus_last_{}'.format(bandlist[0], bandlist[bandlength])
    targetBand1.type = 'float32'
    targetBand1.expression = '(({} - {})<(-2))? 255 : 0'.format(bandlist[x], bandlist[y])
    print("Writing Band first_{}_minus_last_{}".format(bandlist[0], bandlist[bandlength])
    targetBands[bandlength] = targetBand1"""

    parameters = HashMap()
    parameters.put('targetBands', targetBands)
    result = GPF.createProduct('BandMaths', parameters, product)

    print("Writing...")
    ProductIO.writeProduct(result, 'BandMaths.dim', 'BEAM-DIMAP')
    print("BandMaths.dim Done.")
    ProductIO.writeProduct(result, 'BandMaths.tif', "GeoTIFF-BigTIFF")
    print("BandMaths.tif Done.")
示例#24
0
    def __init__(self, product, wkt_footprint, working_dir, external_dem_dir):
        """Prepare to use SNAPPY as a subprocess

        This class prepares commands and runs SNAPPY as a python3.4 subprocess

        """

        self.working_dir = working_dir
        self.product_meta = product
        self.wkt_footprint = wkt_footprint
        self.dem_dir = external_dem_dir

        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

        # Set object parameterisation dictionary
        self.HashMap = jpy.get_type('java.util.HashMap')

        # Set start time and loop counter
        self.start_time = datetime.datetime.now()  # for calculation
        self.start_time_string = self.start_time.strftime("%Y-%m-%d %H:%M:%S")

        print("Processing start time:", self.start_time)
        self.name = self.product_meta['name']

        self.name_with_safe = self.name + '.SAFE'

        self.product_path = os.path.join(self.working_dir, self.name + '.zip')
        self.preprocess_path = working_dir
        self.manifest_path = os.path.join(self.working_dir, self.name_with_safe, 'manifest.safe')

        # for rs2
        self.productxml_path = os.path.join(self.working_dir, self.name, 'product.xml')

        # Read S1 raw data product and assigns source bands for given file
        # readProduct(File file, String... formatNames)
        if product['name'].startswith("S1"):
            self.dataproduct_r = snappy.ProductIO.readProduct(self.manifest_path)
            # self.srcbands = ["Intensity_VV", "Intensity_VH", "Amplitude_VV", "Amplitude_VH"]
            self.srcbands = ["Intensity_VV", "Intensity_VH"]

            print("Reading S1 data product with polarization bands:", self.srcbands)
        # Read RS2 raw data product and assigns source bands for given file
        else:
            self.dataproduct_r = snappy.ProductIO.readProduct(self.productxml_path)
            # self.srcbands = ["Intensity_VV", "Intensity_VH", "Amplitude_VV", "Amplitude_VH"]
            print("Reading RS2 data product with polarization bands:", self.srcbands)

        self.intermediate_product = None

        self.operations_list = []
示例#25
0
    def __init__(self):
        # HashMap
        #           Key-Value pairs.
        #           https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
        self.HashMap = jpy.get_type('java.util.HashMap')

        # Get snappy Operators
        GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

        # Variables
        #           Describes a target band to be generated by this operator.
        #           http://step.esa.int/docs/v2.0/apidoc/engine/org/esa/snap/core/gpf/common/BandMathsOp.BandDescriptor.html
        self.Variables = jpy.get_type(
            'org.esa.snap.core.gpf.common.MosaicOp$Variable')
示例#26
0
def process_date(prod_list, out_dir, orbit, area_of_int, ref_raster,
                 polarizations):
    """products is a list of products of the same orbit (ASCENDING/DESCENDING) and date (STATE_VECTOR_TIME[0:11]). Returns product subset for a given polarizaton"""
    if len(prod_list) > 1:
        # 0 Slice assembly
        param_sliceass = hashp()
        param_sliceass.put('selectedPolarisations', 'VH,VV')
        product = GPF.createProduct("SliceAssembly", param_sliceass, prod_list)
    else:
        product = prod_list[0]

    # 1 Apply orbit file
    param = hashp()
    product = GPF.createProduct("Apply-Orbit-File", param, product)

    # 2 Radiometric calibration
    param = hashp()
    param.put('outputSigmaBand', True)
    param.put('sourceBands', getBandNames(product, 'Intensity_'))
    param.put('selectedPolarisations', 'VH,VV')
    param.put('outputImageScaleInDb', False)

    product = GPF.createProduct("Calibration", param, product)

    # 3 Terrain correction
    param = hashp()
    param.put('demResamplingMethod', 'NEAREST_NEIGHBOUR')
    param.put('imgResamplingMethod', 'NEAREST_NEIGHBOUR')
    param.put('applyRadiometricNormalization', True)
    param.put('demName', 'SRTM 3Sec')
    param.put('pixelSpacingInMeter', 10.0)
    param.put('sourceBands', getBandNames(product, 'Sigma0_'))
    param.put('mapProjection', 'WGS84(DD)')

    product = GPF.createProduct("Terrain-Correction", param, product)

    # 4 Subset
    if area_of_int is not None:
        param = hashp()
        param.put('geoRegion', area_of_int)
        param.put('outputImageScaleInDb', False)
        param.put('sourceBandNames', getBandNames(product, 'Sigma0_'))

        product = GPF.createProduct("Subset", param, product)

    out_name = out_dir + 'S1_' + orbit + '_' + product.getName()[24:32] + '_'

    write_product(product, out_name, ConcisePM(System.out))
示例#27
0
def get_operator_help(operator):
    """This function prints the human readable information about a SNAP operator 
    
    Args:
        operator: SNAP operator
        
    Returns
        The human readable information about the provided SNAP operator.
    
    Raises:
        None.
    """
    op_spi = GPF.getDefaultInstance().getOperatorSpiRegistry().getOperatorSpi(operator)

    logging.info('Operator name: {}'.format(op_spi.getOperatorDescriptor().getName()))

    logging.info('Operator alias: {}\n'.format(op_spi.getOperatorDescriptor().getAlias()))
    logging.info('Parameters:\n')
    param_Desc = op_spi.getOperatorDescriptor().getParameterDescriptors()

    for param in param_Desc:
        logging.info('{}: {}\nDefault Value: {}\n'.format(param.getName(),
                                                   param.getDescription(),
                                                   param.getDefaultValue()))

        logging.info('Possible values: {}\n').format(list(param.getValueSet()))
def dem_extract(in_prod, xpix, ypix, bandname="altitude"):
    """Run the S3 SNOW DEM tool.

    Args:
        inprod (java.lang.Object): snappy java object: SNAP image product
        xpix (float): x position in product to query
        ypix (float): y position in product to query
        bandname (str): DEM band name in product

    Returns:
        slope_vals (dictionnary): values from all bands at the given x,y"""

    # Initialise a HashMap
    parameters = HashMap()

    parameters.put("elevationBandName", bandname)
    parameters.put("copyElevationBand", "true")

    # Run slope operator
    s3snow_slope = GPF.createProduct("SlopeCalculation", parameters, in_prod)

    # Initialise dictionnary to store data
    slope_vals = {}

    # Get all bands
    for band in list(s3snow_slope.getBandNames()):
        currentband = s3snow_slope.getBand(band)
        currentband.loadRasterData()
        slope_vals[band] = currentband.getPixelFloat(xpix, ypix)

    return slope_vals
def TOPSAR_split_s(product):
    parameters = HashMap()
    parameters.put('subswath', 'IW1')
    parameters.put('selectedPolarisations', 'VV')
    parameters.put('firstBurstIndex', 3)
    parameters.put('lastBurstIndex', 6)
    return GPF.createProduct('TOPSAR-Split', parameters, product)
def terrain_correction(src, projection):
    parameters = HashMap()
    parameters.put("demName", "SRTM 1Sec HGT")  # ~25 to 30m
    parameters.put("externalDEMNoDataValue", 0.0)
    parameters.put("externalDEMApplyEGM", True)
    parameters.put("demResamplingMethod", "BICUBIC_INTERPOLATION")
    parameters.put("imgResamplingMethod", "BICUBIC_INTERPOLATION")
    parameters.put("pixelSpacingInMeter", 10.0)
    parameters.put("pixelSpacingInDegree", 8.983152841195215E-5)
    parameters.put("mapProjection", projection)
    parameters.put("alignToStandardGrid", False)
    parameters.put("standardGridOriginX", 0.0)
    parameters.put("standardGridOriginY", 0.0)
    parameters.put("nodataValueAtSea", True)
    parameters.put("saveDEM", False)
    parameters.put("saveLatLon", False)
    parameters.put("saveIncidenceAngleFromEllipsoid", False)
    parameters.put("saveLocalIncidenceAngle", False)
    parameters.put("saveSelectedSourceBand", True)
    parameters.put("outputComplex", False)
    parameters.put("applyRadiometricNormalization", False)
    parameters.put("saveSigmaNought", False)
    parameters.put("saveGammaNought", False)
    parameters.put("saveBetaNought", False)
    parameters.put("incidenceAngleForSigma0",
                   "Use projected local incidence angle from DEM")
    parameters.put("incidenceAngleForGamma0",
                   "Use projected local incidence angle from DEM")
    parameters.put("auxFile", "Latest Auxiliary File")
    return GPF.createProduct("Terrain-Correction", parameters, src)
    sys.exit(1)

file = sys.argv[1]

print("Reading...")
product = ProductIO.readProduct(file)
width = product.getSceneRasterWidth()
height = product.getSceneRasterHeight()
name = product.getName()
description = product.getDescription()
band_names = product.getBandNames()

print("Product: %s, %d x %d pixels, %s" % (name, width, height, description))
print("Bands:   %s" % (list(band_names)))

GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()

HashMap = jpy.get_type('java.util.HashMap')
BandDescriptor = jpy.get_type('org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor')

targetBand1 = BandDescriptor()
targetBand1.name = 'band_1'
targetBand1.type = 'float32'
targetBand1.expression = '(radiance_10 - radiance_7) / (radiance_10 + radiance_7)'

targetBand2 = BandDescriptor()
targetBand2.name = 'band_2'
targetBand2.type = 'float32'
targetBand2.expression = '(radiance_9 - radiance_6) / (radiance_9 + radiance_6)'

targetBands = jpy.array('org.esa.snap.core.gpf.common.BandMathsOp$BandDescriptor', 2)