123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #!/usr/bin/env python3
- ############################################################################
- #
- # MODULE: v.db.univar (formerly called v.univar.sh)
- # AUTHOR(S): Michael Barton, Arizona State University
- # Converted to Python by Glynn Clements
- # Sync'ed to r.univar by Markus Metz
- # PURPOSE: Calculates univariate statistics from a GRASS vector map attribute column.
- # Based on r.univar.sh by Markus Neteler
- # COPYRIGHT: (C) 2005, 2007, 2008 by 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
- # % description: Calculates univariate statistics on selected table column for a GRASS vector map.
- # % keyword: vector
- # % keyword: statistics
- # % keyword: attribute table
- # %end
- # %option G_OPT_V_MAP
- # % required: yes
- # %end
- # %option G_OPT_V_FIELD
- # %end
- # %option G_OPT_DB_COLUMN
- # % description: Name of attribute column on which to calculate statistics (must be numeric)
- # % required: yes
- # %end
- # %option G_OPT_DB_WHERE
- # %end
- # %option
- # % key: percentile
- # % type: double
- # % description: Percentile to calculate (requires extended statistics flag)
- # % required : no
- # % answer: 90
- # % options: 0-100
- # % multiple: yes
- # %end
- # %flag
- # % key: e
- # % description: Extended statistics (quartiles and 90th percentile)
- # %end
- # %flag
- # % key: g
- # % description: Print stats in shell script style
- # %end
- import sys
- import os
- import grass.script as gscript
- from grass.exceptions import CalledModuleError
- def main():
- global tmp
- tmp = gscript.tempfile()
- vector = options["map"]
- layer = options["layer"]
- column = options["column"]
- where = options["where"]
- perc = options["percentile"]
- if not gscript.find_file(vector, element="vector")["file"]:
- gscript.fatal(_("Vector map <%s> not found") % vector)
- try:
- fi = gscript.vector_db(vector, stderr=nuldev)[int(layer)]
- except KeyError:
- gscript.fatal(_("No attribute table linked to layer <%s>") % layer)
- table = fi["table"]
- database = fi["database"]
- driver = fi["driver"]
- passflags = None
- if flags["e"]:
- passflags = "e"
- if flags["g"]:
- if not passflags:
- passflags = "g"
- else:
- passflags = passflags + "g"
- try:
- gscript.run_command(
- "db.univar",
- table=table,
- column=column,
- database=database,
- driver=driver,
- perc=perc,
- where=where,
- flags=passflags,
- )
- except CalledModuleError:
- sys.exit(1)
- if __name__ == "__main__":
- options, flags = gscript.parser()
- nuldev = open(os.devnull, "w")
- main()
|