1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# This Python module is part of the PyRate software package
#
# Copyright 2022 Geoscience Australia
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
"""
python utility to crop an interferogram

example usage:
python pyrate/utils/crop_ifgs.py -i tests/test_data/small_test/tif/geo_060619-061002_unw.tif
-o out.tif -e '150.91 -34.229999976 150.949166651  -34.17'

"""
from optparse import OptionParser
import subprocess


def crop_using_gdalwarp(input_file, output_file, extents):
    # TODO: add extents checking between input_file and extents
    extents_str = [str(e) for e in extents]
    cmd = ['gdalwarp', '-overwrite', '-srcnodata', 'None', '-q', '-te'] \
          + extents_str
    cmd += [input_file, output_file]
    subprocess.check_call(cmd)


if __name__ == '__main__':
    parser = OptionParser(usage='%prog -i input_file -o output_file'
                                ' -e extents\n'
                                'Crop a larger interferogram into '
                                'smaller ones')
    parser.add_option('-i', '--input', type=str, dest='input_file',
                      help='name of input interferogram')

    parser.add_option('-o', '--out', type=str, dest='output_file',
                      help='name of cropped output interferogram')

    parser.add_option('-e', '--extents', type=str, dest='extents',
                      help='extents to be used for the cropped file.\n'
                           'needs to be a list of 4 floats with spaces\n'
                           'example: '
                           "-e '150.91 -34.229999976 150.949166651 -34.17'")

    options, args = parser.parse_args()

    if not options.input_file:  # if filename is not given
        parser.error('Input filename not given.')

    if not options.output_file:  # if filename is not given
        parser.error('Output filename not given.')

    if not options.extents:  # if filename is not given
        parser.error('Crop extents must be provided')

    extents = [float(t) for t in options.extents.split()]

    if len(extents) != 4:
        raise AttributeError('extents to be used for the cropped file.\n'
                             'needs to be a list or tuples of 4 floats\n'
                             "example:"
                             "--extents "
                             "'150.91 -34.229999976 150.949166651 -34.17'")

    crop_using_gdalwarp(input_file=options.input_file,
                        output_file=options.output_file,
                        extents=extents)