Si disponemos de una tabla en gvSIG podemos obtener el número de registros que hay por cada uno de los distintos valores de un campo, la cantidad de veces que se repite cada valor.
Para ello tendremos que crear un nuevo script en gvSIG, desde el menú Herramientas->Scripting->Editor de Scripts (este menú se llama “Scripting Composer” hasta la versión 2.2).
Una vez creado, con el nombre que deseemos, copiamos el siguiente código en él:
from gvsig import * import commonsdialog from org.gvsig.andami import Utilities import os, time from gvsig import * from org.gvsig.app.project.documents.table import TableManager def loadTable(format, **parameters): try: application = ApplicationLocator.getManager() datamanager = application.getDataManager() # Loding the data store store_parameters = datamanager.createStoreParameters(format) copyToDynObject(parameters, store_parameters) store = datamanager.openStore(format, store_parameters) # Creating a Table document and initialize with the data store project = currentProject() table = project().createDocument(TableManager.TYPENAME) table.setStore(store) table.setName(store.getName()) # Add the Table document to the project project().addDocument(table) except Throwable, ex: raise RuntimeException("Can't load table, "+ str(ex)) return table def loadDBF(dbffile): table = loadTable(format="DBF",DbfFile=dbffile) return table def getTempFile(name, ext): tempdir = Utilities.TEMPDIRECTORYPATH if not os.path.isdir(tempdir): os.makedirs(tempdir) t = time.time() f = os.path.join( tempdir, "%s-%x%x%s" % (name,t,(t-int(t)) * 10000,ext) ) return f def main(*args): print "Count values" table = currentTable() field = str(commonsdialog.inputbox("Name of the field")) try: features = table.features() except: commonsdialog.msgbox("Table not opened") count = dict() for f in features: ff = str(f.get(field)) if ff in count.keys(): count[ff] += 1 else: count[ff] = 1 print count sch = createSchema() sch.append('ID','STRING',15) sch.append('COUNT','INTEGER',20) dbf = createDBF(sch, getTempFile("count"+field,".dbf")) print type(dbf()) print "full name: ", dbf.getFullName() #Insert table data dbf.edit() for k,v in count.iteritems(): f = dbf.createNewFeature() f.set('ID',k) f.set('COUNT',v) dbf.insert(f) dbf.commit() d = loadDBF( dbf.getFullName()) print dbf.getFullName() return
Después guardamos dicho script.
Ahora ya sobre la Vista de gvSIG, ponemos la capa sobre la que queramos realizar el cálculo activa y abrimos su tabla de atributos. Después abrimos el lanzador de scripts (menú Herramientas->Scripting->Lanzador de Scripts; este menú se llama “Scripting Launcher” hasta la versión 2.2).
Con doble-click sobre el Script que habíamos creado se abrirá una ventana donde podremos escribir el nombre del campo sobre el que queramos realizar el cálculo. Tras aceptar se habrá creado una nueva tabla con los resultados. Iremos al Gestor de proyectos (en el menú Mostrar), y en el documento “Tabla” tendremos la nueva tabla creada.
Dicha tabla es temporal, por lo que si la queremos mantener podremos exportarla a una tabla dbf en disco (menú Tabla->Exportar a).
Reblogged this on másquesig.