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.