[Gvsig_desarrolladores] Re: cargar capas desde una bbdd GVSIG

Jose Manuel Diaz Bossini jmdiaz en andago.com
Jue Ene 3 13:04:04 CET 2008


Hola otra vez , buscando por ahí he logrado encontrar un ejemplillo que 
creo que carga la capa desde una base postGIS  :

private void cargarCapaPostGIS (String actionCommand,MapControl 
mapCtrl,View v){
             String dbURL = 
"jdbc:postgresql://192.168.16.27:5432/idegetafe";
            String user = "postgres";
            String pwd = "";
            String layerName = actionCommand;
            String tableName = actionCommand;
            IConnection conn ;
               String selectedDriver = "PostGIS JDBC Driver";
           
            try {

                Driver drv = LayerFactory.getDM().getDriver(selectedDriver);

                IVectorialJDBCDriver dbDriver = (IVectorialJDBCDriver) drv;
                IConnection conex = 
ConnectionFactory.createConnection(dbURL,
                        user, pwd);

                DBLayerDefinition dbLayerDef = new DBLayerDefinition();
                dbLayerDef.setCatalogName("idegetafe");
                dbLayerDef.setSchema("public");
                dbLayerDef.setTableName(layerName);
                //dbLayerDef.setShapeType(geometryType);
                //dbLayerDef.setFieldsDesc(fieldsDesc);
                dbLayerDef.setFieldGeometry("geometry");
                dbLayerDef.setFieldID("idwifi");

                dbLayerDef.setWhereClause("");
                String strSRID = mapCtrl.getProjection().getAbrev()
                        .substring(5);
                dbLayerDef.setSRID_EPSG(strSRID);
                dbLayerDef.setConnection(conex);

                PostGISWriter writer= new PostGISWriter(); // 
(PostGISWriter)LayerFactory.getWM().getWriter("PostGIS
                                                            // Writer");
                writer.setWriteAll(true);
                writer.setCreateTable(true);
                writer.initialize(dbLayerDef);

                // Creamos la tabla.
                writer.preProcess();
                writer.postProcess();

                if (dbDriver instanceof ICanReproject)
                {
                    ((ICanReproject)dbDriver).setDestProjection(strSRID);
                }

                // Creamos el driver. OJO: Hay que añadir el campo ID a la
                // definición de campos.

                boolean bFound = false;
                for (int i=0; i < dbLayerDef.getFieldsDesc().length; i++)
                {
                    FieldDescription f = dbLayerDef.getFieldsDesc()[i];
                    if 
(f.getFieldName().equalsIgnoreCase(dbLayerDef.getFieldID()))
                    {
                        bFound = true;
                        break;
                    }
                }
                // Si no está, lo añadimos
                if (!bFound)
                {
                    int numFieldsAnt = dbLayerDef.getFieldsDesc().length;
                    FieldDescription[] newFields = new 
FieldDescription[dbLayerDef.getFieldsDesc().length + 1];
                    for (int i=0; i < numFieldsAnt; i++)
                    {
                        newFields[i] = dbLayerDef.getFieldsDesc()[i];
                    }
                    newFields[numFieldsAnt] = new FieldDescription();
                    newFields[numFieldsAnt].setFieldDecimalCount(0);
                    newFields[numFieldsAnt].setFieldType(Types.INTEGER);
                    newFields[numFieldsAnt].setFieldLength(7);
                    
newFields[numFieldsAnt].setFieldName(dbLayerDef.getFieldID());
                    dbLayerDef.setFieldsDesc(newFields);

                }

                dbDriver.setData(conex, dbLayerDef);
                IProjection proj = null;
                if (drv instanceof ICanReproject)
                {
                    proj = CRSFactory.getCRS("EPSG:" + 
((ICanReproject)dbDriver).getSourceProjection(null,null));
                }

                FLyrVect lyr = (FLyrVect) 
LayerFactory.createDBLayer(dbDriver, layerName, proj);
                    v.getMapControl().getMapContext().getLayers()
                           .addLayer(lyr);
                    v.getMapControl().getMapContext().endAtomicEvent();
                   
               
    } catch (Exception e) {
        e.printStackTrace();
    }
           
    }


*pero el problema que tengo ahora es que no encuentra el driver y no se 
si es que está mal definido o ha cambiado el nombre del driver o algo , 
la excepcion es la siguiente : *

com.hardcode.driverManager.DriverLoadException: No se encontró el 
driver: PostGIS JDBC Driver
    at 
com.hardcode.driverManager.DriverManager.getDriver(DriverManager.java:170)
    at 
com.iver.cit.gvsig.pluginPrueba.ExtensionAndago.cargarCapaPostGIS(ExtensionAndago.java:149)
    at 
com.iver.cit.gvsig.pluginPrueba.ExtensionAndago.pintarCapasPerfil(ExtensionAndago.java:84)
    at 
com.iver.cit.gvsig.pluginPrueba.ExtensionAndago.execute(ExtensionAndago.java:31)
    at 
com.iver.andami.plugins.ExtensionDecorator.execute(ExtensionDecorator.java:88)
    at 
com.iver.andami.ui.mdiFrame.MDIFrame.actionPerformed(MDIFrame.java:616)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown 
Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown 
Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at 
com.iver.andami.ui.AndamiEventQueue.dispatchEvent(AndamiEventQueue.java:58)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)





Jose Manuel Diaz Bossini wrote:
> Hola de nuevo a todos y feliz año nuevo !
>
> Y como mandan las tradiciones , año nuevo , pregunta nueva :), tengo 
> un problemilla que no se si podréis resolverme , estoy intentando 
> cargar una capa directamente desde una base de datos postgis , he 
> visto que en una de las extensiones existe la clase PostGISLayerLoader 
> , y he intentado usar su metodo load , para pasarle los parametros de 
> la base de datos y la tabla desde la que quiero que cargue la capa , 
> pero ni siquiera consigo que compile dado que no me reconoce la clase 
> Resource que le debemos pasar , he añadido el proyecto donde se 
> encuentra esta clase a mi extension y consigo que compile pero en 
> tiempo de ejecución me da una javaClassNotFoundException y la verdad 
> que no se por qué .
>
> Mis preguntas son , en primer lugar , es posible usar esta clase desde 
> mi extension pasandole solo la conexion , usuario , password y tabla 
> de la capa para cargar la misma? . Si es posible , alguien sabe como 
> resolver el error de la classNotFOund??? . Hay algun ejemplo por ahí 
> sencillito de conexion a bbdd postgis y recuperación de una capa ?.
>
> Muchas gracias a to2 .
>



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