You are on page 1of 7

CursoscriptingengvSIG2:Manipulacindedatosvectoriales 1

Losfenmenosdeuna
fuentededatostabular

2013gvSIGAssociation
EstedocumentosedistribuyeconlalicenciaCreativeCommons

2013gvSIGAssociation
CursoscriptingengvSIG2:Manipulacindedatosvectoriales 2

ndice de contenido
1Accesoalosfenmenosdeunafuentededatostabular.................................................3
2Lacoleccindefenmenos.LaclaseFeatureSet.............................................................3
3Manejodelaseleccin.LaclaseSelection.......................................................................4
4ElobjetoFeature...............................................................................................................5
5Modificacindelosatributosdeunfenmeno................................................................5
6Aadirunregistroalafuentededatos............................................................................6

2013gvSIGAssociation
CursoscriptingengvSIG2:Manipulacindedatosvectoriales 3

1 Acceso a los fenmenos de una fuente de datos tabular


Paraaccederalosfenmenosdeunafuentededatostabularseutilizaelmtodo features.Este
mtodo devuelve un objeto que nos permite iterar sobre el conjunto de datos de la capa. Sin
embargo,hayquetenerencuentaqueeliteradorreutilizalainstanciaparaelnuevovalor,porlo
queduranteunaiteracinnodebemosguardarnoselvalordelainstancia,sinoobtenerunacopiade
estamedianteelmtodo getCopydelfenmeno.Elmotivoparareutilizarlainstanciaesqueesta
tcnica aumenta la velocidad de ejecucin y crea muchas menos instancias de objetos, lo que
mejoraelrendimientodelamquinavirtualdejava.

2 La coleccin de fenmenos. La clase FeatureSet


Elcdigoparaobtenerlosfenmenosdelacapaactivasera
layer=currentLayer()
features=layer.features()

LosmtodosmsimportantesquetieneelobjetofeatureSetson
getCount()
update(feature)

getCount():devuelveelnmerodefenmenosquetienelafuentededatos
update(feature):actualizaunfenmenodentrodelacoleccin.
Veamoscmorecorrerlosfenmenosdeunacapaconunejemplo.Supongamosquetenemosuna
capaactivacuyosfenmenostienenunapropiedad ELEVACION,nosotrosqueremosobtenerel
objetofeaturequesecorrespondeconelvalormximodeesteatributo.
Lospasosquesesiguenenelejemploson(ejemplo1):
Obtenemoslacapaactiva
Obtenemoseliteradordelconjuntodefenmenosdelacapa
Inicializamoslasvariables
Recorremoselconjuntodefenmenosmedianteeliterador
ComprobamoselvalordelatributoELEVACION
Siesmayorqueelqueyahemosalmacenadoguardamoselfenmeno
layer = currentLayer()
features = layer.features()
fmax = 0.0
newFeature = None
for feature in features:
if feature.ELEVACION > fmax:
newFeature = feature.getCopy()
#
#resto de codigo

2013gvSIGAssociation
CursoscriptingengvSIG2:Manipulacindedatosvectoriales 4

Recuerda quedebes realizar una copia de la feature y nouna asigancin


directa.

3 Manejo de la seleccin. La clase Selection


Podemosobtenerunsubconjuntoconcretodefenmenosdeunacapaotablaaplicandounfiltro
sobrelosatributosdelosfenmenos.Paraellotenemosqueinvocaralmtodo'features'delacapa
usandolacondicinquequeremosqueseapliquealconjuntodelosdatosparaobtenernuestro
subconjunto.
Porejemplo,elcdigodeaplicarunfiltroanuestroconjuntodedatospodraser(ejemplo2):
layer = currentLayer()
expresion = "ID >= 50 AND ID < 100"
features = layer.features(expresion)
#
#resto de codigo

Tambinpuededarselacircunstanciadequequeramosoperarconunconjuntodedatosqueya
tenemosseleccionadosenlacapa.EnestecasodeberemosusarelmtodogetSelectiondelacapa
(ejemplo3).

layer = currentLayer()
features = layer.getSelection()
#
#resto de codigo
Esposible,tambin,quequeramosrecorrerlosfenmenoseiraadiendoalgunosalaseleccin,
paraello,loprimeroquedebemoshaceresobtenerelobjeto'selection'yaadirlosfenmenosque
queramosmedianteelmtodo'select'(ejemplo4).
layer = currentLayer()
features = layer.features()
for feature in features:
featureCopy = feature.getCopy()
layer.getSelection().select(featureCopy)
#
#resto de codigo
Esteejemploanterior,haraunaseleccindetodoslosfenmenosdelacapa,loqueesequivalente
almtodo'selectAll'(ejemplo5).
layer = currentLayer()
features = layer.getSelection().selectAll()
Siqueremosseleccionarlosfenmenosquecumplanunadeterminadacondicinpodemoshacerlo
delasiguientemanera.Esteejemploaadealaseleccinelfenmenoquetieneelvalormsaltoen
elcampoELEVATION(ejemplo6).
layer = currentLayer()
features = layer.features()

2013gvSIGAssociation
CursoscriptingengvSIG2:Manipulacindedatosvectoriales 5

fmax =0
featureCopy = None
for feature in features:
if feature.ELEVACION > fmax:
featureCopy = feature.getCopy()
if featureCopy:
layer.getSelection().select(featureCopy)
#
#resto de codigo

4 El objeto Feature
Representaunfenmenodeunafuentededatostabular.Susmtodosprincipalesson:
geometry()
getValues()
edit()
set(nombre,valor)

geometry():Devuelvelageometrapordefectodelfenmeno.
getValues(): Devuelve un diccionario con el nombre y el valor de las propiedades del
fenmeno
edit():poneelfenmenoenmodoedicin.
set(nombre,valor):Estableceenlapropiedadestablecidamedianteelparmetronombreel
valorpasadocomoparmetro.
nombre,string:Nombredelapropiedaddelfenmeno
valor,object:Valorquedebeasignarsealapropiedad

5 Modificacin de los atributos de un fenmeno


Losfenmenosnosoneditablesensmismos.Paraeditarunfenmenoesnecesarioinvocaral
mtodoedit(),acontinuacinserealizanloscambiosquesequieranaplicarsobreelfenmeno.
Internamentelaedicindeunafeatureserealizamedianteunacopiadeesta
paraevitarqueseproduzcanambigedadesenelestadointernodelfenmeno.
Elcdigoparamodificarunatributodelfenmenosera(ejemplo7)
fuente = currentTable()
features = fuente.features()
for feature in features:
feature.edit()
feature.set("NombreDelAtributo", valor)
fuente.update(feature)

fuente.commit()
El cdigo para modificar una capa es el mismo llamando a la funcin
currentLayer.

2013gvSIGAssociation
CursoscriptingengvSIG2:Manipulacindedatosvectoriales 6

6 Aadir un registro a la fuente de datos


Para aadir un registro ofenmeno nuevo ala fuente dedatos tabular debe usarse el mtodo
appenddelainstanciadelafuentededatos.
table = currentTable()
table.append(values)
table.update()
table.commit()

append(values):Creaunnuevofenmenoyloaadealacoleccindedatos.
values,dict:Aadeenlapropiedadkeydelfenmeno,elvalorcorrespondiente.
Sielobjetonoestenestadodeedicinalusarestemtodosecambiarelestadoamodo
edicin.
Porejemplo,supongamosquetenemosundxfsinregistrosconuncampo"Id",detipoenteroy
queremosaadir10registrosnuevoscuyoidseincrementeenunaunidad(ejemplo8).
table = currentTable()
values = dict()
for i in range(1,11):
values["Id"] = i
table.append(values)
table.commit()

2013gvSIGAssociation
CursoscriptingengvSIG2:Manipulacindedatosvectoriales 7

gvSIGAssociation
PlazaDonJuandeVillarrasa145,
46001,Valencia(Spain)
RegistroNacionaldeAsociaciones:596206
email:info@gvsig.com
Web:www.gvsig.com

Webdelproyecto:http://www.gvsig.org

DocumentacinrealizadaporVctorAcevedo.

ListasdeDistribucin
Existentreslistasdedistribucinconelobjetodefacilitarlacomunicacinentretodoslosinteresadosenelproyecto
gvSIG.Lasdosprimeras,ladeusuariosyladedesarrolladores,estnprincipalmenteorientadasalacomunidadde
habla hispana, siendo el castellano el idioma preferente a utilizar en las mismas. La tercera de ellas, lista
internacional,estorientadaprincipalmentealrestodecomunidadesylalenguapreferenteautilizareslainglesa.

Listadeusuarios.Aqupodishacerllegarvuestraopininsobreelfuncionamiento:qucosasos
gustaraquesedesarrollaran,dudasenelusodegvSIGytodoaquelloquepensisquetienecabidaenunalista
deusuarios.Elenlaceparalasuscripcinalalistadeusuarioses:
http://listserv.gva.es/mailman/listinfo/gvsig_usuarios

Listadedesarrolladores.Estorientadaparatodoslosinteresadosenconocercmoestdesarrollado
elgvSIG.Elenlaceparalasuscripcinaestalistaesa:
http://listserv.gva.es/mailman/listinfo/gvsig_desarrolladores

Listainternacional.Estorientadatantoparausuarioscomoparadesarrolladoresdehablanohispana.
Elidiomaautilizarespreferentementeingls.Elenlaceparalasuscripcinaestalistaes:
http://listserv.gva.es/mailman/listinfo/gvsig_internacional

Todos los nombres propios de programas, sistemas operativos, equipo hardware etc., que
aparecenenestecursosonmarcasregistradasdesusrespectivascompaasuorganizaciones.

2013gvSIGAssociation

Este manual se distribuye con la licencia Creative Commons ReconocimientoCompartirIgual 3.0


Unported(http://creativecommons.org/licenses/ccbysa/3.0/deed.es)VercondicionesenAnexos

2013gvSIGAssociation

You might also like