[Gvsig_desarrolladores] conectarme a Base Spacial

Elder Robert Zavaleta Veneros erobert_zv en hotmail.com
Lun Nov 8 22:56:10 CET 2010


Gracias, por tu respuesta, pero de esa manera me limita la carga por ejemplo de otras capas u ortofotos contenidas dentro
de un proyecto.

 Sigo investigando, sobre lo referido

Atentamente
Robert Zavaleta

> Date: Mon, 8 Nov 2010 04:40:49 -0800
> From: rcastellanos en habana.geocuba.cu
> To: gvsig_desarrolladores en listserv.gva.es
> Subject: Re: [Gvsig_desarrolladores] conectarme a Base Spacial
> 
> 
> Hola 
> 
> Yo utilizo para cargar capas de la BD una clase que encontré en este foro, y
> permite pasarle los parámetros de la conexión que quieras.
> 
> Aquí te envío el código, te advierto que solo tiene configurado el driver
> para cargar capas de postgresql.
> 
> import java.sql.Connection;
> import java.sql.DatabaseMetaData;
> import java.sql.ResultSet;
> import java.util.ArrayList;
> 
> import javax.swing.JOptionPane;
> 
> import org.apache.log4j.Logger;
> import org.cresques.cts.ICoordTrans;
> import org.cresques.cts.IProjection;
> import org.cresques.cts.ProjectionPool;
> 
> import com.hardcode.driverManager.Driver;
> import com.iver.andami.PluginServices;
> import com.iver.cit.gvsig.fmap.MapControl;
> import com.iver.cit.gvsig.fmap.core.ICanReproject;
> import com.iver.cit.gvsig.fmap.crs.CRSFactory;
> import com.iver.cit.gvsig.fmap.drivers.ConnectionFactory;
> import com.iver.cit.gvsig.fmap.drivers.ConnectionJDBC;
> import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
> import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
> import com.iver.cit.gvsig.fmap.drivers.IConnection;
> import com.iver.cit.gvsig.fmap.drivers.IVectorialJDBCDriver;
> import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGISWriter;
> import com.iver.cit.gvsig.fmap.layers.FLayer;
> import com.iver.cit.gvsig.fmap.layers.FLyrVect;
> import com.iver.cit.gvsig.fmap.layers.LayerFactory;
> import com.iver.cit.gvsig.project.documents.view.gui.View;
> 
> //import controlador.Controlador;
> 
> /**
>  * @author Sergio Piñón Campañó
>  *
>  */
> 
> public class CargadorCapas {
>     private static String selectedDriver;
> 
> private static Logger log = Logger.getLogger(CargadorCapas.class);
> 
> public CargadorCapas() {
>         selectedDriver = "PostGIS JDBC Driver";
> }
> 
> /**
> * Crea una capa a partir de una tabla de la BD y la añade al
> <code>mapControl y a la Vista <code>v
> * @param mapControl
> * @param v
> */
> 
> 
> public FLyrVect cargarTabla(String nombreTabla, String lyName, int posicion,
> String whereClause, MapControl mapControl, View v, String url, String puser,
> String ppass) {
>        
> String dbURL = url;//"jdbc:postgresql://localhost:5432/Baracoa";
> 
>         String user = puser;//"postgres";
>         String pwd = ppass;//"postgres";
>        
>         IConnection conex = null;
> try {
>        
> IVectorialJDBCDriver dbDriver = (IVectorialJDBCDriver)
> LayerFactory.getDM().getDriver("PostGIS JDBC Driver");
>        
> Driver drv = LayerFactory.getDM().getDriver(selectedDriver);
> 
> conex = ConnectionFactory.createConnection(dbURL, user, pwd);
> 
> /*creamos la definicion para la capa*/
> DBLayerDefinition dbLayerDef = new DBLayerDefinition();
> dbLayerDef.setCatalogName("Baracoa"); //Nombre de la base de datos
> dbLayerDef.setSchema("public"); //Nombre del esquema
> dbLayerDef.setTableName(nombreTabla); //Nombre de la tabla
> dbLayerDef.setFieldGeometry("the_geom");
> dbLayerDef.setFieldID("gid");
> dbLayerDef.setWhereClause(whereClause);
> dbLayerDef.setConnection(conex);
> //dbLayerDef.setName(lyName);
> 
> /*obtenemos conexion JDBC*/
> 
> Connection conexion = ((ConnectionJDBC) conex).getConnection();
> DatabaseMetaData metadataDB = conexion.getMetaData();
> 
> String tipos[] = new String[1];
> tipos[0] = "TABLE";
> 
> ResultSet tablas = metadataDB.getTables(null, null, nombreTabla, tipos);
> tablas.next();
> 
> String t = tablas.getString(tablas.findColumn("TABLE_NAME"));
> 
> ResultSet columnas = metadataDB.getColumns(null,null,nombreTabla, "%");
> ResultSet claves = metadataDB.getPrimaryKeys(null, null, nombreTabla);
> 
> ArrayList<FieldDescription> descripciones = new ArrayList
> <FieldDescription>();
> 
> ArrayList<String> nombres = new ArrayList<String>();
> 
> while(columnas.next()) {
> log.info("Tratando atributo: \""+columnas.getString("Column_Name")+"\" de la
> tabla: "+nombreTabla);
> if(columnas.getString("Type_Name").equalsIgnoreCase("geometry")) {
> /*si es la columna de geometria*/
> log.info("Encontrado atributo de geometria para la tabla:"+nombreTabla);
> dbLayerDef.setFieldGeometry(columnas.getString("Column_Name"));
> }
> else {
> FieldDescription fieldDescription = new FieldDescription();
> fieldDescription.setFieldName(columnas.getString("Column_Name"));
> fieldDescription.setFieldType(columnas.getType());
> descripciones.add(fieldDescription);
> nombres.add(columnas.getString("Column_Name"));
> }
> }
> FieldDescription fields[] = new FieldDescription[descripciones.size()];
> String s[] = new String[nombres.size()];
> for(int i = 0; i < descripciones.size(); i++)  {
> fields[i] = descripciones.get(i);
> s[i] = nombres.get(i);
> }
> dbLayerDef.setFieldsDesc(fields);
> dbLayerDef.setFieldNames(s);
> 
> /*buscamos clave primaria y la añadimos a la definicion de la capa*/
>   while(claves.next()) {
>    dbLayerDef.setFieldID(claves.getString("Column_Name"));
>    }
> 
> //PostGISWriter writer = new PostGISWriter();
> 
> //writer.setWriteAll(false);
> //writer.setCreateTable(false);
> 
> IProjection proj = null;
> String strEPSG = "2085";
> 
> if (drv instanceof ICanReproject)
> {                  
>         dbLayerDef.setSRID_EPSG(strEPSG);
>        
>     if (dbDriver instanceof ICanReproject)
>     {
>         ((ICanReproject)dbDriver).setDestProjection(strEPSG);
>     }
>       dbDriver.setData(conex, dbLayerDef);
>      
>     if (dbDriver instanceof ICanReproject)
>     {
>      // el error lo da aquiiiiiii
>    
>     // proj = CRSFactory.getCRS("EPSG:" +
> ((ICanReproject)dbDriver).getSourceProjection(null,dbLayerDef));
>    
>     proj = CRSFactory.getCRS("EPSG:2085");
>    
>     }
> }
> FLayer lyr =  LayerFactory.createDBLayer(dbDriver, lyName, proj);
> 
> if (lyr!=null && mapControl!=null && v!=null) {
>     lyr.setVisible(true);
>     v.getMapControl().getMapContext().beginAtomicEvent();
>     // Comprobamos si es necesario reproyectar
>     checkProjection(lyr, v.getMapControl());
>    
>     v.getMapControl().getMapContext().getLayers().addLayer(lyr);
>     v.getMapControl().getMapContext().endAtomicEvent();
> }
> 
> 
> return (FLyrVect) lyr;
> } catch (Exception e) {
> log.warn("No se pudo cargar capa de la tabla: "+nombreTabla);
> e.printStackTrace();
> return null;
> }
> 
> }
> 
> private void checkProjection(FLayer lyr, MapControl mc)
>     {
>         if (lyr instanceof FLyrVect)
>         {
>             FLyrVect lyrVect = (FLyrVect) lyr;
>             IProjection proj = lyr.getProjection();
>             // Comprobar que la proyección es la misma que la vista
>             if (proj == null)
>             {
>                  log.warn("Reproyectando capa "+lyr.getName()+" porque no
> tenía proyección asignada");
>                 lyrVect.setProjection( mc.getViewPort().getProjection());
>                 return;
>             }
>             if
>                
> (!proj.getAbrev().equals(mc.getViewPort().getProjection().getAbrev())) {
>                 int option =
> JOptionPane.showConfirmDialog(null,PluginServices.getText(this,
> "reproyectar_aviso"),
>                              PluginServices.getText(this,
> "reproyectar_pregunta"),JOptionPane.YES_NO_OPTION);
> 
>                 if (option == JOptionPane.NO_OPTION) {
>                     return;
>                 } else {
>                     log.error("coordTrans = " + proj.getAbrev() + " " +
> mc.getViewPort().getProjection().getAbrev());
>                    
>                     lyrVect.reProject((ICoordTrans) mc);
>                     System.err.println("coordTrans = " +
>                         proj.getAbrev() + " " +
>                         mc.getViewPort().getProjection().getAbrev());
>                 }
>             }
>         }
>     }
> 
> }
> 
> Espero te sirva 
> 
> Saludos, Raisel
> -- 
> View this message in context: http://osgeo-org.1803224.n2.nabble.com/conectarme-a-Base-Spacial-tp5710854p5716700.html
> Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20101108/00399e8e/attachment.htm 


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