[Gvsig_usuarios] Cargar capas postgis

mj mariajose.casalins en acadi.es
Jue Abr 3 17:31:26 CEST 2008


 

Hola, necesito un poquito de ayuda. Quiero hacer un menú que cargue unas
capas de postgis en gvsig. Encontre un código en el foro de desarrolladores
de gvsig en el que saltaba una excepción. He conseguido que la excepción no
me salte pero no me hace nada. Os copio el código, a ver si alguno me echa
una mano porque estoy un poco perdida. Estoy con la version 1.1.2. 

 

public void cargarPostgis(MapControl mapCtrl, View v){

            String dbURL = "jdbc:postgresql://localhost:5432/argentina";

            String user = "postgres";

            String pwd = "Asus11";

 

            

            IConnection conn;

            String selectedDriver = "PostGIS JDBC Driver";

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

            IVectorialJDBCDriver dbDriver = (IVectorialJDBCDriver) drv;

            try {

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

                  DBLayerDefinition dbLayerDef = new DBLayerDefinition();

                  dbLayerDef.setCatalogName("argentina"); //Nombre de la
base de datos

                  dbLayerDef.setSchema("public"); //Nombre del esquema

                  dbLayerDef.setTableName("rios"); //Nombre de la tabla

                  dbLayerDef.setFieldGeometry("the_geom"); //Nombre de la
columna geométrica

                  dbLayerDef.setFieldID("gid"); //Columna ID

                  dbLayerDef.setWhereClause("");

                  String strSRID =
mapCtrl.getProjection().getAbrev().substring(5);

                  dbLayerDef.setSRID_EPSG(strSRID);

                  dbLayerDef.setConnection(conex);

                  PostGISWriter writer = new PostGISWriter();

 

                  writer.setWriteAll(true);

                  //No queremos crear la tabla

                  writer.setCreateTable(false);

                  try {

                        writer.initialize(dbLayerDef);

                        //Creamos la tabla

                        writer.preProcess();

                        writer.postProcess();

                        if (dbDriver instanceof ICanReproject){

 
((ICanReproject)dbDriver).setDestProjection(strSRID);

                        }

                        

                        //Creamos el dirver, hay que añadir el campo ID a la
definición de campos

                        boolean bFound = false;

                        System.out.println("prueba
"+dbLayerDef.getFieldsDesc());

                        if (dbLayerDef.getFieldsDesc()!=null){

                             System.out.println("Si entro aqui es que no soy
null ");

                  

                        for (int i=0;
i<dbLayerDef.getFieldsDesc().length;i++){

                             FieldDescription f =
dbLayerDef.getFieldsDesc()[i];

                             if
(f.getFieldName().equalsIgnoreCase(dbLayerDef.getFieldID())){

                                   bFound = true;

                                   break;

                             }

                        }

                        }

                        bFound = true;

                        //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);

                        }

                        //Esto lo pongo para probar

                        

                        FieldDescription [] newFields = new FieldDescription
[1];

                        newFields[0] = new FieldDescription();

                        newFields[0].setFieldDecimalCount(0);

                        newFields[0].setFieldType(Types.INTEGER);

                        newFields[0].setFieldLength(7);

                        newFields[0].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, "rios", proj);

                        v.getMapControl().getMapContext().getLayers(); 

                        v.getMapControl().getMapContext().endAtomicEvent();

                        

                  } catch (EditionException e) {

                        // TODO Auto-generated catch block

                        System.err.println("Error "+e);

                        e.printStackTrace();

                  }

                  

                  

                  

            } catch (DBException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

            }

      }

 

Un saludo y muchas gracias de antemano.

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_usuarios/attachments/20080403/b4688188/attachment.htm


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