[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