Programmazione & GIS

:: Python :: v.test_colonna ::

Si riporta di seguito uno script Python mediante il quale, una volta scelta una copertura vettoriale e selezionata una sua colonna, è possibile sapere la tipologia di valori contenuti nella colonna stessa.

v.test_colonna.py

Di per se questo script non è molto utile, ma invece la funzione test_column_type, in esso contenuta, si presta ad essere estrapolata da questo contesto ed utilizzata in applicativi ove sia necessario controllare la tipologia di colonna sulla quale effettuare delle elaborazioni. Si immagini di dover sommare i valori contenuti in una colonna e l'utente ne seleziona, sbagliando, una contenente caratteri, lo script andrebbe in errore mostrando le righe di codice interessate, quindi, un utente poco esperto non capirebbe cosa sia accaduto. Invece, mediante la funzione test_column_type si può preventivamente controllare la tipologia di valori contenuti nella colonna e, in caso di dato non conforme, segnalare l'errore all'utente mediante un apposito messaggio. Inoltre, all'interno della funzione sono effettuati dei controlli circa l'esistenza della copertura e della colonna che sono state indicate. Qualora una delle due non esista, la funzione arresta lo script e segnala l'errore riscontrato.

v.test_colonna.py-Segnalazione errore

Si riporta di seguito il codice dello script Python v.test_colonna.py:
#!/usr/bin/env python
#****************************************************************
#*
#* MODULE:     v.test_colonna, v 1.0.0
#*
#* AUTHOR(S):  Antonio Alliegro
#*
#* PURPOSE:    Verifica la tipologia di una colonna
#*             appartenente ad una copertura vettoriale
#*
#* COPYRIGHT:  (C) 2011 Antonio Alliegro Civil Engineer
#*             Salerno, Italy
#*             antonioall(at)libero.it
#*
#*             First Version: 2011/07/06
#*             Last  Version: 2011/07/06
#*
#*             This program is free software under the
#*             GNU General Public License (>=v2).
#*             Read the file COPYING that comes with GRASS
#*             for details.
#*
#****************************************************************

#%module
#% description: Verifica la tipologia di una colonna appartenente ad una copertura vettoriale
#% keywords: vector
#%end

#%option
#% key: map
#% type: string
#% gisprompt: old,vector,vector
#% key_desc: nome
#% description: Nome copertura vettoriale
#% required: yes
#%end

#%option
#% key: colonna
#% type: string
#% key_desc: nome
#% description: Nome colonna su cui verificare la tipologia del dato
#% required : yes
#% gisprompt: old_dbcolumn,dbcolumn,dbcolumn
#%end
                        
import sys, time
import grass.script as grass

def test_column_type(cover_name, column_name):

    grass.message("Estrazione informazioni dal database...")

    ret = grass.read_command('v.info',
                             flags = 'c',
                             map = cover_name,
                             layer = None,
                             quiet = True)

    if ret == "" or ret == {}:
        grass.fatal("")

    result = dict()
    for line in ret.splitlines():
        ctype, cname = line.split('|')
        result[cname] = ctype

    grass.message('completata')

    try:
        s = result[column_name]
    except:
        s = 1
        grass.fatal("La colonna <%s> non esiste." % column_name)

    return s
    #End test_column_type

def main():
    copertura = options['map']
    colonna = options['colonna']

    grass.message("--------------------------------------------")
    grass.message("La colonna <%s> e' del tipo: %s" % (colonna,
        test_column_type(copertura, colonna)))
    grass.message("--------------------------------------------")

    return 0
    #End main

if __name__ == "__main__":
    options, flags = grass.parser()
    sys.exit(main())
                        

Visualizza il file sorgente di v.test_colonna.py


Argomenti correlati: