[Gvsig_desarrolladores] gvSIG y GML

Vicente Caballero vicente.caballero en iver.es
Lun Mayo 9 17:08:35 CEST 2005



----- Original Message ----- 
From: "Javi" <javijgac en terra.es>
To: <gvsig_desarrolladores en runas.cap.gva.es>
Sent: Monday, May 09, 2005 2:15 PM
Subject: [Gvsig_desarrolladores] gvSIG y GML



    Hola a todos, estoy trabajando en una aplicación de localización y 
seguimiento de flotas para el proyecto fin de carrera y me gustaría saber 
cómo va el desarrollo de gvSIG en cuanto al acceso a servidores WFS y el 
renderizado de datos GML.

Ahora mismo estamos desarrollando un driver WFS, no sé en que versión de gvSIG saldrá, pero está en camino.

    A ver si alguno de ustedes me puede aclarar algunos aspectos del WFS. 
¿Si tengo en pantalla información GML renderizada y hago un zoom sobre una 
parte, el cliente WFS no debería acceder de nuevo al servidor a pedir mas 
datos, únicamente tendría que volver a renderizar la zona solicitada?

Si cuando te conectas al servidor para descargarte sus Features te las guardas en local, cuando hagas un zoom o una consulta sobre estas Features, no necesitarás volver a consultar al servidor. Pero si por el contrario, lo que se hace es hacer una petición al servidor y la renderizamos directamente sin guardarla, tendrémos que seguir haciendo peticiones al servidor en cada operación que hagamos ya sea de cambio de zoom o sobre los atributos.

El problema de almacenar features en local, es cuando guardamos las Features en memoria y las capas son muy grandes.
Y por otro lado, tenemos la opción de hacer consultas al servidor de cada operación, en este caso, el problema es la velocidad.

   El tema es que llevo varias semanas buscando aplicaciones cliente que 
manejen datos GML (open source), y no he encontrado muchas. Finalmente 
tenía pensado meterle mano a UDIG, pero hay un par de detalles que no me 
acaban de convencer; me suele ocurrir que al hacer un panning, la ventana 
grafica se queda en blanco o desaparecen vectores. Por otro lado,  lo 
requerimientos de memoria al abrir una simple capa que tiene 4 rayas en 
GML, se disparatan.

    He estado mirando librerías para el tratamiento de vectores, pero estoy 
un poco perdido pues no controlo la parte gráfica de java. Como supongo que 
todavía queda para que gvSIG soporte GML, estaría muy agradecido por 
cualquier comentario sobre cómo renderizar GML de una forma mas o menos 
dinámica. Se que Geotools tiene una estructura específica para el acceso a 
un servidor WFS -> WFSDataStore pero ¿permite la representación en pantalla 
de la información obtenida o hay q hacerlo a mano?

gvSIG, no trabaja con Features de geotools, utiliza sus propias geometrías y atributos. Por tanto, la forma de implementar un driver para el acceso a WFS se puede hacer mediante geotools pero después hay que transformar el resultado a geometrias de gvSIG para poder dibujarlas.

Como crear un DataStore de geotool:

DataStore ds;
 private String urlS="http://localhost:8080/geoserver/wfs";
 private String versionS="version=1.0.0";
 private String requestS="request=getcapabilities";
 private String serviceS="service=wfs";

 URL url=null;
   try {
    url = new URL(urlS+"?"+versionS+"&"+requestS+"&"+serviceS);
   } catch (MalformedURLException e) {
    e.printStackTrace();
   }
   int timeout=10000;
   boolean protocol=true;
   
         Map m = new HashMap();
         m.put(WFSDataStoreFactory.URL.key,url);
         m.put(WFSDataStoreFactory.TIMEOUT.key,new Integer(timeout));
         m.put(WFSDataStoreFactory.PROTOCOL.key,new Boolean(protocol));
   
      try {
           ds = (new WFSDataStoreFactory()).createNewDataStore(m);
      } catch (IOException e) {
           e.printStackTrace();
      }
  
    String[] names=null;
     try {
     names = ds.getTypeNames();
     } catch (IOException e1) {
       e1.printStackTrace();
     }
  
    System.out.println("Capas :");
       
  for (int i=0;i<names.length;i++){
   System.out.println("Capa "+i+" : "+names[i]);
   //Se selecciona la capa que se quiere abrir
   if (true)//si esta seleccionada en la lista o arbol que se muestre en el wizard
   typeNames.add(names[i]);
  }
    
    Como obtener un FeatureReader de geotools sobre la capa 0 del servidor:

    Query query = new DefaultQuery((String)ds.getTypeNames()[0]);
    FeatureReader fr=null;
    try {
     fr = ds.getFeatureReader(query,Transaction.AUTO_COMMIT);
    
    } catch (IOException e) {
     e.printStackTrace();
    }
    
    Como dibujar en gvSIG las geometrías de Geotools:

Para dibujar las geometrías se debe de extender la clase DefaultStrategy de la misma forma que lo hace ShpStrategy, y de esta forma crear la estrategia WFS.

while(fr.hasNext()){
    IGeometry g=ShapeFactory.createGeometry(FConverter.jts_to_java2d(fr.next().getDefaultGeometry()));
    
    g.draw(g,viewPort, symbol);
}

Supongo que esto se queda corto como contestación, pero espero que ayude de alguna forma a las dudas que tenías.
No te envio el código de lo que tenemos, ya que todavía se esta estudiando si interesa utilizar geotools para acceder a WFS o crear nuestro propio driver.


    Muchas gracias y enhorabuena por el proyecto ;-)

No se si te he ayudado, y para cualquier cosa más que quieras consultar, ya sabes.


P.D.: Creo que en el archivo readme.txt incluido en el código fuente hay un 
error en el paso 4, pues el parámetro de las extensiones aparece como 
"gvSIG extensiones/gvSIG" en lugar de "gvSIG gvSIG/extensiones". La verdad 
que es un detalle insignificante, pero si no llego a mirar el archivo de la 
lista, no consigo compilar el código fuente ;-)
Lo cambiaremos, gracias.

_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores en runas.cap.gva.es
http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores



 Vicente Caballero Navarro
  Equipo de desarrollo gvSIG
  http://www.gvsig.gva.es
  IVER Tecnologías de la Información
  C/ Salamanca 50-52. Valencia 46005
  Tel: 96 316 34 00

  Valencia - España
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/mailman/private/gvsig_desarrolladores/attachments/20050509/b77955f6/attachment.htm


Más información sobre la lista de distribución gvSIG_desarrolladores