[GRASS-SVN] r68094 - grass/trunk/scripts/m.proj
svn_grass at osgeo.org
svn_grass at osgeo.org
Mon Mar 21 06:27:55 PDT 2016
Author: wenzeslaus
Date: 2016-03-21 06:27:54 -0700 (Mon, 21 Mar 2016)
New Revision: 68094
Modified:
grass/trunk/scripts/m.proj/m.proj.py
Log:
m.proj: PEP8 compliant code (author: Rob Parsons)
File header according to
https://trac.osgeo.org/grass/wiki/Submitting/Python
Modified: grass/trunk/scripts/m.proj/m.proj.py
===================================================================
--- grass/trunk/scripts/m.proj/m.proj.py 2016-03-21 13:20:59 UTC (rev 68093)
+++ grass/trunk/scripts/m.proj/m.proj.py 2016-03-21 13:27:54 UTC (rev 68094)
@@ -1,20 +1,21 @@
#!/usr/bin/env python
-############################################################################
-#
-# MODULE: m.proj
-# AUTHOR: M. Hamish Bowman, Dept. Marine Science, Otago Univeristy,
-# New Zealand
-# Converted to Python by Glynn Clements
-# PURPOSE: cs2cs reprojection frontend for a list of coordinates.
-# Replacement for m.proj2 from GRASS 5
-# COPYRIGHT: (c) 2006-2014 Hamish Bowman, and the GRASS Development Team
-# This program is free software under the GNU General Public
-# License (>=v2). Read the file COPYING that comes with GRASS
-# for details.
-#
-#############################################################################
+"""
+MODULE: m.proj
+AUTHOR(S): M. Hamish Bowman, Dept. Marine Science, Otago Univeristy,
+ New Zealand
+ Converted to Python by Glynn Clements
+
+PURPOSE: cs2cs reprojection frontend for a list of coordinates.
+ Replacement for m.proj2 from GRASS 5
+
+COPYRIGHT: (c) 2006-2014 Hamish Bowman, and the GRASS Development Team
+ This program is free software under the GNU General Public
+ License (>=v2). Read the file COPYING that comes with GRASS
+ for details.
+"""
+
# notes:
# - cs2cs expects "x y" data so be sure to send it "lon lat" not "lat lon"
# - if you send cs2cs a third data column, beware it might be treated as "z"
@@ -96,6 +97,7 @@
from grass.script.utils import separator, parse_key_val
from grass.script import core as grass
+
class TrThread(threading.Thread):
def __init__(self, ifs, inf, outf):
threading.Thread.__init__(self)
@@ -114,6 +116,7 @@
self.outf.close()
+
def main():
coords = options['coordinates']
input = options['input']
@@ -127,84 +130,92 @@
copy_input = flags['e']
include_header = flags['c']
- #### check for cs2cs
+ # check for cs2cs
if not grass.find_program('cs2cs'):
- grass.fatal(_("cs2cs program not found, install PROJ.4 first: http://proj.maptools.org"))
+ grass.fatal(_(
+ "cs2cs program not found, install PROJ.4 first: \
+ http://proj.maptools.org"))
- #### check for overenthusiasm
+ # check for overenthusiasm
if proj_in and ll_in:
- grass.fatal(_("Choose only one input parameter method"))
+ grass.fatal(_("Choose only one input parameter method"))
if proj_out and ll_out:
- grass.fatal(_("Choose only one output parameter method"))
+ grass.fatal(_("Choose only one output parameter method"))
if ll_in and ll_out:
- grass.fatal(_("Choise only one auto-projection parameter method"))
+ grass.fatal(_("Choise only one auto-projection parameter method"))
if output and not grass.overwrite() and os.path.exists(output):
- grass.fatal(_("Output file already exists"))
+ grass.fatal(_("Output file already exists"))
if not coords and not input:
grass.fatal(_("One of <coordinates> and <input> must be given"))
if coords and input:
- grass.fatal(_("Options <coordinates> and <input> are mutually exclusive"))
+ grass.fatal(_(
+ "Options <coordinates> and <input> are mutually exclusive"))
- #### parse field separator
+ # parse field separator
# FIXME: input_x,y needs to split on multiple whitespace between them
if fs == ',':
ifs = ofs = ','
else:
- try:
- ifs, ofs = fs.split(',')
- except ValueError:
- ifs = ofs = fs
+ try:
+ ifs, ofs = fs.split(',')
+ except ValueError:
+ ifs = ofs = fs
ifs = separator(ifs)
ofs = separator(ofs)
- #### set up projection params
+ # set up projection params
s = grass.read_command("g.proj", flags='j')
kv = parse_key_val(s)
if "XY location" in kv['+proj'] and (ll_in or ll_out):
- grass.fatal(_("Unable to project to or from a XY location"))
+ grass.fatal(_("Unable to project to or from a XY location"))
in_proj = None
if ll_in:
- in_proj = "+proj=longlat +datum=WGS84"
- grass.verbose("Assuming LL WGS84 as input, current projection as output ")
+ in_proj = "+proj=longlat +datum=WGS84"
+ grass.verbose(
+ "Assuming LL WGS84 as input, current projection as output ")
if ll_out:
- in_proj = grass.read_command('g.proj', flags = 'jf')
+ in_proj = grass.read_command('g.proj', flags='jf')
if proj_in:
- in_proj = proj_in
+ in_proj = proj_in
if not in_proj:
- grass.verbose("Assuming current location as input")
- in_proj = grass.read_command('g.proj', flags = 'jf')
-
+ grass.verbose("Assuming current location as input")
+ in_proj = grass.read_command('g.proj', flags='jf')
+
in_proj = in_proj.strip()
grass.verbose("Input parameters: '%s'" % in_proj)
out_proj = None
if ll_out:
- out_proj = "+proj=longlat +datum=WGS84"
- grass.verbose("Assuming current projection as input, LL WGS84 as output ")
+ out_proj = "+proj=longlat +datum=WGS84"
+ grass.verbose(
+ "Assuming current projection as input, LL WGS84 as output ")
if ll_in:
- out_proj = grass.read_command('g.proj', flags = 'jf')
+ out_proj = grass.read_command('g.proj', flags='jf')
if proj_out:
- out_proj = proj_out
+ if '+' in proj_out:
+ out_proj = proj_out
+ else:
+ grass.fatal(_("Invalid PROJ.4 output specification"))
if not out_proj:
- grass.fatal(_("Missing output projection parameters "))
+ grass.fatal(_("Missing output projection parameters "))
out_proj = out_proj.strip()
grass.verbose("Output parameters: '%s'" % out_proj)
- #### set up input file
+ # set up input file
if coords:
x, y = coords.split(',')
tmpfile = grass.tempfile()
@@ -222,63 +233,66 @@
grass.fatal(_("Unable to read input data"))
inf = file(infile)
grass.debug("input file=[%s]" % infile)
-
- #### set up output file
+
+ # set up output file
if not output:
- outfile = None
- outf = sys.stdout
+ outfile = None
+ outf = sys.stdout
else:
- outfile = output
- outf = open(outfile, 'w')
- grass.debug("output file=[%s]" % outfile)
+ outfile = output
+ outf = open(outfile, 'w')
+ grass.debug("output file=[%s]" % outfile)
- #### set up output style
+ # set up output style
if not decimal:
- outfmt = ["-w5"]
+ outfmt = ["-w5"]
else:
- outfmt = ["-f", "%.8f"]
+ outfmt = ["-f", "%.8f"]
if not copy_input:
- copyinp = []
+ copyinp = []
else:
- copyinp = ["-E"]
+ copyinp = ["-E"]
- #### do the conversion
+ # do the conversion
# Convert cs2cs DMS format to GRASS DMS format:
# cs2cs | sed -e 's/d/:/g' -e "s/'/:/g" -e 's/"//g'
- cmd = ['cs2cs'] + copyinp + outfmt + in_proj.split() + ['+to'] + out_proj.split()
- p = grass.Popen(cmd, stdin = grass.PIPE, stdout = grass.PIPE)
+ cmd = ['cs2cs'] + copyinp + outfmt + \
+ in_proj.split() + ['+to'] + out_proj.split()
+ p = grass.Popen(cmd, stdin=grass.PIPE, stdout=grass.PIPE)
+
tr = TrThread(ifs, inf, p.stdin)
tr.start()
if not copy_input:
- if include_header:
- outf.write("x%sy%sz\n" % (ofs, ofs))
- for line in p.stdout:
+ if include_header:
+ outf.write("x%sy%sz\n" % (ofs, ofs))
+ for line in p.stdout:
try:
xy, z = line.split(' ', 1)
x, y = xy.split('\t')
except ValueError:
grass.fatal(line)
-
- outf.write('%s%s%s%s%s\n' % \
+
+ outf.write('%s%s%s%s%s\n' %
(x.strip(), ofs, y.strip(), ofs, z.strip()))
else:
- if include_header:
- outf.write("input_x%sinput_y%sx%sy%sz\n" % (ofs, ofs, ofs, ofs))
- for line in p.stdout:
+ if include_header:
+ outf.write("input_x%sinput_y%sx%sy%sz\n" % (ofs, ofs, ofs, ofs))
+ for line in p.stdout:
inXYZ, x, rest = line.split('\t')
inX, inY = inXYZ.split(' ')[:2]
- y, z = rest.split(' ', 1)
- outf.write('%s%s%s%s%s%s%s%s%s\n' % \
- (inX.strip(), ofs, inY.strip(), ofs, x.strip(), \
- ofs, y.strip(), ofs, z.strip()))
+ y, z = rest.split(' ', 1)
+ outf.write('%s%s%s%s%s%s%s%s%s\n' %
+ (inX.strip(), ofs, inY.strip(), ofs, x.strip(),
+ ofs, y.strip(), ofs, z.strip()))
p.wait()
if p.returncode != 0:
- grass.warning(_("Projection transform probably failed, please investigate"))
+ grass.warning(_(
+ "Projection transform probably failed, please investigate"))
if __name__ == "__main__":
options, flags = grass.parser()
More information about the grass-commit
mailing list