-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgeoref_hdf5.py
executable file
·95 lines (87 loc) · 3.86 KB
/
georef_hdf5.py
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""
Script description goes here...
"""
import sys
from optparse import OptionParser
import logging
import os
from h5georef import H5Georef
def create_parser():
usage = """
Georeference a HDF5 file and warp it to the desired projection.
%prog [options] [input_hdf5_file]
"""
parser = OptionParser(usage=usage, version="%prog 0.9")
parser.add_option("-d", "--dataset", dest="datasetName",
help="Name of a specific dataset to process. If not"
" specified, only the main dataset will be processed.",
default=None)
parser.add_option("-o", "--output-dir", dest="outputDir",
help="Output directory for the warped files."
" Defaults to the directory where this script is called.",
default=os.getcwd())
parser.add_option("-g", "--georef-dir", dest="georefDir",
help="Output directory for the georeferenced files that"
" are still in the GEOS projection. Defaults to"
" <output_dir>/georef", default=None)
parser.add_option("-p", "--projection-string", dest="projectionString",
help="Projection string indicating the desired output"
" projection. Accepts the same string formats as proj4."
" Defaults to '+init=epsg:4326'.",
default="+init=epsg:4326")
parser.add_option("-x", "--delete-georefs", action="store_true",
dest="deleteGeorefs",
help="Delete intermediary georeferenced files.",
default=False)
parser.add_option("-v", "--verbose", action="count", dest="verbose",
help="Increase verbosity (specify "
"multiple times for more)", default=1)
return parser
def main(fileList, georefsDir, warpedDir, projectionString):
logging.info("Starting execution...")
if georefsDir is None:
georefsDir = os.path.join(warpedDir, "georefs")
logging.debug("georefsDir: %s" % georefsDir)
logging.debug("warpedDir: %s" % warpedDir)
logging.debug("projectionString: %s" % projectionString)
logging.debug("fileList: %s" % fileList)
for dirPath in (warpedDir, georefsDir):
logging.debug("Creating directory: %s" % dirPath)
if not os.path.isdir(dirPath):
os.makedirs(dirPath)
georefFiles = []
for hdf5FilePath in fileList:
logging.debug("Processing file %s..." % hdf5FilePath)
h5g = H5Georef(hdf5FilePath)
samples = h5g.get_sample_coords()
logging.debug("Sample points: %s" % [s for s in samples])
logging.debug("Georeferencing...")
georefs = h5g.georef_gtif(samples, georefsDir)
logging.debug("Georeferenced files: %s" % [f for f in georefs])
logging.debug("Warping...")
warps = h5g.warp(georefs, warpedDir, projectionString)
logging.debug("Warped files: %s" % [f for f in warps])
georefFiles += georefs
if options.deleteGeorefs:
logging.info("About to delete intermediary files...")
for filePath in georefFiles:
logging.debug("Deleting %s" % filePath)
os.remove(filePath)
try:
logging.debug("Deleting %s" % georefsDir)
os.rmdir(georefsDir)
except OSError:
logging.debug("Unable to delete the temporary files' directory.")
logging.info("Done!")
if __name__ == "__main__":
parser = create_parser()
options, fileList = parser.parse_args(sys.argv[1:])
if options.verbose == 1:
logLevel = logging.INFO
elif options.verbose > 1:
logLevel = logging.DEBUG
logging.basicConfig(level=logLevel)
main(fileList, options.georefDir, options.outputDir,
options.projectionString)