:: Python :: v.elimina :: |
---|
Volendo eliminare un file vettoriale sul mio sistema mediante le funzionalità fornite con
Grass, il più delle volte, eseguendo il relativo comando,
questo fallisce al primo tentativo, mentre il 90% delle volte riesce al secondo.
A dire il vero, se al vettoriale non è collegato un database, l'eliminazione avviene sempre al
primo tentativo (Aggiornamento gennaio 2012: il problema è stato
risolto, se il file vettoriale è collegato ad un database ora viene eliminato sempre al primo
tentativo).
Per ovviare a questo inconveniente, ho realizzato una funzione remove che utilizzando g.remove effettua iterativamente più tentativi (per un massimo di 5) controllando a priori se il vettoriale esiste oppure è stato eliminato nel precedente ciclo. La funzione viene richiamata dal corpo dello script (main). A remove viene associata la variabile copertura che contiene il nome del vettoriale da eliminare estratto dalla variabile globale map dal parser. Ovviamente, la funzione remove può essere estrapolata da questo contesto ed utilizzata in applicativi più complessi ove, per esempio, è necessario creare dei vettoriali temporanei sui quali effettuare estrazioni di informazioni nonché calcoli e che poi vanno opportunamente eliminati a fine elaborazione. Si riporta di seguito il codice dello script Python v.elimina.py per Grass 6.4.X: #!/usr/bin/env python #**************************************************************** #* #* MODULE: v.elimina, v 1.0.0 #* #* AUTHOR(S): Antonio Alliegro #* #* PURPOSE: Elimina coperture vettoriali #* #* COPYRIGHT: (C) 2011 Antonio Alliegro Civil Engineer #* Salerno, Italy #* antonioall(at)libero.it #* #* First Version: 2011/06/21 #* Last Version: 2011/06/21 #* #* This program is free software under the #* GNU General Public License (>=v2). #* Read the file COPYING that comes with GRASS #* for details. #* #**************************************************************** #%module #% description: Elimina coperture vettoriali #% keywords: vector #%end #%option #% key: map #% type: string #% gisprompt: old,vector,vector #% key_desc: nome #% description: Nome copertura vettoriale #% required: yes #%end import sys, time import grass.script as grass def remove(cover_name): i = 0 while grass.find_file(cover_name, element = 'vector')['fullname'] != '' and i < 5: ret = grass.parse_command('g.remove', flags = 'f', vect = cover_name, quiet = True) i += 1 if grass.find_file(cover_name, element = 'vector')['fullname'] == '': grass.message("File <%s> rimosso al tentativo n. %d" % (cover_name, i)) return 0 #End remove def main(): copertura = options['map'] remove(copertura) return 0 #End main if __name__ == "__main__": options, flags = grass.parser() sys.exit(main())Visualizza il file sorgente di v.elimina.py per Grass 6.4.X Nella versione di Grass 7.0.X è stato modificata la sintassi del comando g.remove. Pertanto, per poterlo utilizzare, occorre modificare le righe di codice dove viene richiamato: def remove(cover_name): i = 0 while grass.find_file(cover_name, element = 'vector')['fullname'] != '' and i < 5: ret = grass.parse_command('g.remove', flags = 'f', type = 'vector', name = cover_name, quiet = True) i += 1 if grass.find_file(cover_name, element = 'vector')['fullname'] == '': grass.message("File <%s> rimosso al tentativo n. %d" % (cover_name, i)) return 0Visualizza il file sorgente di v.elimina.py per Grass 7.0.X
Argomenti correlati:
|