Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Crear Extensiones en GvSIG
Crear Extensiones en GvSIG
Motivacin
Vamos a crear una extensin desde 0 La extensin crear una capa vectorial donde dibujaremos polgonos por cdigo Los polgonos se correspondern con provincias, y tendrn un nombre y un nmero de habitantes rearemos una herramienta !ue devolver el nombre de la provincia al seleccionarla en la vista
2
Motivacin
rear proyecto
#eleccionar $%ava &roject' y darle un nombre al proyecto (p)e) *xtMy&lugin+ rear una carpeta llamada $src' para poner los "uentes
"
rear pa!uete
rear carpetas
on"ig)xml
rear los "icheros para las traducciones en castellano y en ingl-s (text)properties y text.en)properties+ rear el "ichero build)xml
&
/uild)xml
Por
<property name="plugin" value="com.iver.cit.gvsig.myplugin"/>
*liminar la lnea
<copy file="config/about.htm" todir="${dist "/>
*jecutar el buid
10
omprobaciones
omprobar !ue en la carpeta $."12ndami34gv#5634extensiones' aparece esto
11
7ependencias
,ay !ue indicarle al plugin los proyectos de los !ue depende &inchamos sobre el proyecto con el botn derecho y seleccionamos la opcin $&roperties' #eleccionamos $%ava /uild &ath' 28adimos los proyectos en $&rojects'9
12
7ependencias
7ependencias
1!
*xtensin
Vamos a crear nuestra primera extensin &ara ello tenemos !ue crear una clase, !ue herede de la clase $*xtension' La podemos llamar $Load&rovincias*xtension'
1"
*xtensin
*scribir el $extends *xtension' 2parecer una $bombilla amarilla' !ue indica un error) &ulsar el ella y elegir la opcin $5mport @*xtension@ (com)iver)andami)plugins+'
1#
*xtensin
La $bombilla' sigue estando) Volver a pulsarla y seleccionar la opcin $add unimplemented methods'
1$
*xtensin
Modi"icar los m-todos is*nabled e isVisible para !ue se habilite la extensin y sea visible) &ara ello tiene !ue devolver $true')
public boolean isVisible() { return true; } public boolean isEnabled() { return true; }
1%
*xtensin
Vamos a ponerle algo de cdigo a la extensin para ver !ue se ejecuta An #ystem)out)println(BMe estoy ejecutandoB+ en el execute ser su"iciente (de momento+
1&
on"ig)xml
,ay !ue con"igurar el $con"ig)xml' para asociarle una opcin de men a la extensin opiamos el $con"ig)xml' de la extensin exa*xample0 para usarlo de plantilla) reamos una nica extensin9 *l class3nameC 'com)iver)cit)gvsig)myplugin)Load&rovincias *xtension' La opcin de men es $Mi &lugin: argar #hape de provincias' &oner las opciones de men en castellano y en ingl-s
20
&rimera ejecucin
Da podemos ejecutar el $build)xml' y ejecutar gv#56) 7ebera aparecernos la opcin de men !ue hemos a8adido 2l pulsar en ella veremos el mensaje !ue hemos escrito por la consola del eclipse
21
is*nabled
2ntes de incorporar el comportaimento para a8adir una capa, debemos deshabilitar la opcin del men, para !ue solo se vea cuando haya una vista activa ?enemos !ue implementar el m-todo is*nabled de la *xtension
public boolean isEnabled() { "#indo$ v %&luginServices. get '" anager().get(ctive#indo$(); i) (v instanceo) Vie$){ return true; }else{ return )alse; } }
22
argar #hape
Vamos a sustituir el cdigo del $execute' por un cdigo !ue cree una capa de provincias) &artir del cdigo del $ reateMemoryLinesLayer' (copiar el execute+ y crear un tema de polgonos !ue representarn las provincias) Asar $;poligonE7', en lugar de $;polylineE7' Los polgonos se cierran solos omprobar !ue la capa se carga
2!
28adir atributos
28adirle a los polgonos los atributos9 579 5denti"icador de la provincia =>M/F*9 =ombre &>/L2 5G=9 =mero de habitantes
(rray*ist array+ields % ne$ (rray*ist(); array+ields.add(""'"); array+ields.add(",- ./E"); array+ields.add("&-.*(C"-,"); Value01 aux/o$ % ne$ Value021;
2"
28adir 2tributos
5nsertar los polgonos con sus respectivos atributos &ara ello simplemente hay !ue darle los valores correctos a $auxFo1' antes de introducir el polgono en la capa)
2#
*jecutar el buid y abrir gv#56 para comprobar !ue "unciona Ver la tabla asociada a la capa
2$
Vamos a crear un control !ue nos mostrar en una ventana personaliHada la in"ormacin de una provincia al pulsar sobre ella &rimero deberemos copiar la imagen $ejemplo)png' del proyecto $exa*xample0' a la carpeta images de nuestro plugin 2 continuacin deberemos crear otra extensin llamada $&rovincias5n"o*xtensin'
2%
28adir en el con"ig)xml otra entrada para la nueva extensin) class3nameC $com)iver)cit)gvsig)myplugin)&rovincias5n"o*xt ension' 28adir un botn en la barra de herramientas9 en lugar de $menu' hay !ue usar la eti!ueta $toolbar' #e pueden encontrar ejemplos de toolbars en los con"ig@s de los otros proyectos (p)e9 appgv#56+
2&
5n"o/y&ointListener
Vamos a crear una herramienta !ue sea capaH de interactuar sobre la vista al hacer un $clicI' en ella reamos el pa!uete $tools' reamos la clase $5n"o/y&ointListener'
5n"o/y&ointListener
*l listener debe de implementar la inter"aH $&ointListener' 5gual !ue antes, pulsando dos veces la $bombilla amarilla' solucionamos los problemas
5n"o/y&ointListener
,ay !ue a8adirle un atributo de tipo Map ontrol al listener ,ay !ue de"inir un constructor !ue tenga como argumento de entrada ese parmetro
apControl mapControl % null;
private
Ventana de 5n"ormacin
Vamos a crear la ventana !ue va ha mostrarnos la in"ormacin de las provincias reamos el pa!uete $panels' reamos dentro de -l la clase $&rovincias&anel'
Ventana de 5n"ormacin
La ventana tiene !ue heredar de $%panel' e implementar la inter"aH $5Jindo1' An clicI en la $bombilla', y los errores desaparecern
Ventana de 5n"ormacin
public #indo$"n)o get#indo$"n)o() { #indo$"n)o m7vie$"n)o % ne$ #indo$"n)o(#indo$"n)o. -'(*'"(*-8); m7vie$"n)o.set#idt6(59:); m7vie$"n)o.set;eig6t(43); m7vie$"n)o.set<itle(&luginServices.get<ext(t6is= "title")); return m7vie$"n)o; }
"
Ventana de 5n"ormacin
La cadena $title' debe a8adirse en los "icheros de traducciones *l set,eight y el setJidth especi"ican las dimensiones !ue tendr la ventana resultante Jindo15n"o)M>72L752L>6 indica el comportamiento de la ventana
Ventana de 5n"ormacin
ompletar el constructor de la ventana para !ue dibuje un cuadro de texto donde aparecer el nombre de la provincia seleccionada ada uno puede crear una ventana ms compleja
Ventana de 5n"ormacin
public &rovincias&anel(String provincias,ame){ super(); ><ext+ield t)&rovincias % ne$ ><ext+ield(); t)&rovincias.set.ounds(:=:=5:3=53); t)&rovincias.set<ext(provincias,ame); t6is.set*ayout(null); t6is.add(t)&rovincias); }
Map ontrol
omponente !ue controla lo !ue se puede hacer sobre una vista #e le pueden a8adir nuevas herramientas *n nuestro caso vamos a a8adirle una herramienta para seleccionar geometras #iempre tiene una herramienta seleccionada (Hoom, desplaHamiento, etc+
&
La extensin deber crear un listener al ser ejecutada y le asociar la vista correspondiente *l listener deber ser capaH de abrir una ventana y escribir el nombre de la provincia
Fegistra Listener 7ibuja Ventana
*xtensin
Map ontrol
!0
Anin *xtensin3Listener
rear en la extensin un listener >btener el Map ontrol y registrarlo argar la herramienta 5mplementar el is*nabled igual !ue antes
!1
Anin *xtensin3Listener
private "n)o.y&oint*istener listener % null; public void execute(String actionCommand){ Vie$ vie$ % (Vie$)&luginServices. get '" anager().get(ctive#indo$(); apControl mc % vie$.get apControl(); i) (listener %% null){ listener % ne$ "n)o.y&oint*istener(mc); mc.add ap<ool("provincias"n)o"=ne$ &oint.e6avior(listener)); } mc.set<ool("provincias"n)o"); }
!2
omprobacin
public void point(&ointEvent event) t6ro$s .e6aviorException { &oint5' p/eal % event.get&oint(); &oint5' map&oint % mapControl.getVie$&ort(). to ap&oint((int)p/eal.get?()= (int)p/eal.get@()); System.out.println("El punto seleccionado esA " B map&oint.get?() B " " B map&oint.get@());
omprobacin
Vamos a comprobar !ue el listener "unciona correctamente &ara ello vamos a modi"icar el m-todo point del 5n"o/y&ointListener para !ue muestre por la consola el punto de la vista $seleccionado'
!!
,acer un "iltro
?enemos !ue obtener una re"erencia a la capa de provincias sobre la !ue se ejecutar la consulta
double tol % mapControl.getVie$&ort(). to ap'istance(4); +*ayers lyrs % mapControl.get apContext().get*ayers(); +*yrVect lyr&rovincias % (+lyrVect)lyrs.get*ayer("Example");
reamos la consulta
+.itSet selection % lyr&rovincias. Cuery.y&oint(map&oint=tol);
!"
i) (Dselection.isEmpty()){ 'ataSource ds % (((lp6anumeric'ata)lyr&rovincias). get/ecordset(); ds.start(); int id+ield % ds.get+ield"ndex.y,ame(""'"); int id,ombre % ds.get+ield"ndex.y,ame(",- ./E"); int id&oblacion % ds.get+ield"ndex.y,ame("&-.*(C"-,"); Value str"' % ds.get+ieldValue( selection.nextSet.it(3)=id+ield); Value str,ombre % ds.get+ieldValue( selection.nextSet.it(3)=id,ombre); Value str&oblacion % ds.get+ieldValue( selection.nextSet.it(3)=id&oblacion); ds.stop();
!#
?enemos !ue crear una ventana de resultados y pasarle en nombre de la provincia ,ay !ue introducir esta ventana en 2ndami
i) (str,ombre D% null){ &rovincias&anel panel % ne$ &rovincias&anel(str,ombre.toString()); &luginServices.get '" anager(). add#indo$(panel); }
!$
5n"o by &oint
!%
!&