/gdal-1.9.1-fedora/swig/python/samples/gdal_edit.py
Python | 154 lines | 123 code | 2 blank | 29 comment | 1 complexity | 9084f0b775e927f47327a2be05598ee1 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0
- #!/usr/bin/env python
- ###############################################################################
- # $Id: gdal_edit.py 23103 2011-09-22 16:58:49Z rouault $
- #
- # Project: GDAL samples
- # Purpose: Edit in place various information of an existing GDAL dataset
- # Author: Even Rouault <even dot rouault at mines dash paris dot org>
- #
- ###############################################################################
- # Copyright (c) 2011, Even Rouault <even dot rouault at mines dash paris dot org>
- #
- # Permission is hereby granted, free of charge, to any person obtaining a
- # copy of this software and associated documentation files (the "Software"),
- # to deal in the Software without restriction, including without limitation
- # the rights to use, copy, modify, merge, publish, distribute, sublicense,
- # and/or sell copies of the Software, and to permit persons to whom the
- # Software is furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included
- # in all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- # DEALINGS IN THE SOFTWARE.
- ###############################################################################
- import sys
- from osgeo import gdal
- def Usage():
- print('Usage: gdal_edit [--help-general] [-a_srs srs_def] [-a_ullr ulx uly lrx lry]')
- print(' [-tr xres yres] [-unsetgt] [-a_nodata value] ')
- print(' [-mo "META-TAG=VALUE"]* datasetname')
- print('')
- print('Edit in place various information of an existing GDAL dataset.')
- return -1
- def gdal_edit(argv):
- argv = gdal.GeneralCmdLineProcessor( argv )
- if argv is None:
- return -1
- datasetname = None
- srs = None
- ulx = None
- uly = None
- lrx = None
- lry = None
- nodata = None
- xres = None
- yres = None
- unsetgt = False
- molist = []
- i = 1
- argc = len(argv)
- while i < argc:
- if argv[i] == '-a_srs' and i < len(argv)-1:
- srs = argv[i+1]
- i = i + 1
- elif argv[i] == '-a_ullr' and i < len(argv)-4:
- ulx = float(argv[i+1])
- i = i + 1
- uly = float(argv[i+1])
- i = i + 1
- lrx = float(argv[i+1])
- i = i + 1
- lry = float(argv[i+1])
- i = i + 1
- elif argv[i] == '-tr' and i < len(argv)-2:
- xres = float(argv[i+1])
- i = i + 1
- yres = float(argv[i+1])
- i = i + 1
- elif argv[i] == '-a_nodata' and i < len(argv)-1:
- nodata = float(argv[i+1])
- i = i + 1
- elif argv[i] == '-mo' and i < len(argv)-1:
- molist.append(argv[i+1])
- i = i + 1
- elif argv[i] == '-unsetgt' :
- unsetgt = True
- elif argv[i][0] == '-':
- sys.stderr.write('Unrecognized option : %s\n' % argv[i])
- return Usage()
- elif datasetname is None:
- datasetname = argv[i]
- else:
- sys.stderr.write('Unexpected option : %s\n' % argv[i])
- return Usage()
- i = i + 1
- if datasetname is None:
- return Usage()
- if srs is None and lry is None and yres is None and not unsetgt and nodata is None and len(molist) == 0:
- print('No option specified')
- print('')
- return Usage()
- exclusive_option = 0
- if lry is not None:
- exclusive_option = exclusive_option + 1
- if yres is not None:
- exclusive_option = exclusive_option + 1
- if unsetgt:
- exclusive_option = exclusive_option + 1
- if exclusive_option > 1:
- print('-a_ullr, -tr and -unsetgt options are exclusive.')
- print('')
- return Usage()
- ds = gdal.Open(datasetname, gdal.GA_Update)
- if ds is None:
- return -1
- if srs is not None:
- ds.SetProjection(srs)
- if lry is not None:
- gt = [ ulx, (lrx - ulx) / ds.RasterXSize, 0,
- uly, 0, (lry - uly) / ds.RasterYSize ]
- ds.SetGeoTransform(gt)
- if yres is not None:
- gt = ds.GetGeoTransform()
- # Doh ! why is gt a tuple and not an array...
- gt = [ gt[i] for i in range(6) ]
- gt[1] = xres
- gt[5] = yres
- ds.SetGeoTransform(gt)
- if unsetgt:
- ds.SetGeoTransform([0,1,0,0,0,1])
- if nodata is not None:
- for i in range(ds.RasterCount):
- ds.GetRasterBand(1).SetNoDataValue(nodata)
- if len(molist) != 0:
- ds.SetMetadata(molist)
- ds = None
- return 0
- if __name__ == '__main__':
- sys.exit(gdal_edit(sys.argv))