Buenos días a todos,
Necesito crear una capa a partir de dos tablas de la base de
datos(postgresql), para posteriormente aplicar una leyenda por intervalos.
En una tabla tengo almacenada la geometría y otros campos y en otra
tabla tengo almacenado el campo por el cual quiero realizar la leyenda. No
almaceno este campo junto a la geometría puesto que depende del año y en
caso que lo incluyese me saldría una tabla demasiado extensa. Ambas tablas
están relacionadas por un campo en común.
He creado capas a partir de una tabla, pero no soy capaz de crear una
capa a partir de dos tablas. Este sería el código para una tabla:
metadataDB = conexion1.getMetaData();
String tipos[] = new String[1];
tipos[0] = "TABLE";
ResultSet tablas = metadataDB.getTables(null,
null,nombreTabla_Par, tipos);
tablas.next();
String t = tablas.getString(tablas.findColumn( "TABLE_NAME"
));
ResultSet columnas =
metadataDB.getColumns(null,null,nombreTabla_Par, "%");
Vector<String> vcolumnas=new Vector<String>();
int p=0;
while(columnas.next()) {
if
(columnas.getString("Column_Name").compareTo("the_geom") != 0 )
if
(!columnas.getString("Column_Name").equals("the_geom"))
vcolumnas.addElement(columnas.getString("Column_Name"));
// datos.set(i, columnas.getString("Column_Name"));
//
System.out.println("Contenido"+columnas.getString("Column_Name"));
}
/*creamos la definicion para la capa*/
dbLayerDef = new DBLayerDefinition();
dbLayerDef.setCatalogName(nombreBD); //Nombre de la base de
datos
dbLayerDef.setSchema(esquema); //Nombre del esquema
dbLayerDef.setTableName(nombreTabla_Par); //Nombre de la
tabla
dbLayerDef.setWhereClause("where municipio='"+ municipio
+"'");
dbLayerDef.setConnection(conex);
String[] fields=new String[vcolumnas.size()];
for(int i=0; i<vcolumnas.size(); i++){
fields[i]= vcolumnas.get(i);
System.out.println("Dentro del for "+ fields[i]);
}
dbLayerDef.setFieldNames(fields);
dbLayerDef.setFieldGeometry("the_geom");
dbLayerDef.setFieldID("gid");
dbDriver.setData(conex, dbLayerDef);
IProjection proj = null;
//if (drv instanceof ICanReproject){
proj = CRSFactory.getCRS("EPSG:23030");
//}
System.out.println("La proyeccion" + proj);
FLayer lyr = LayerFactory.createDBLayer(dbDriver,
municipio, proj);
/*asignamos proyección a la capa y al ViewPort*/
v.getMapControl().getViewPort().setProjection(proj);
dbLayerDef.setSRID_EPSG("EPSG:23030");
*¿ y para relacionar las dos como se haría?*. Teniendo en cuenta que el
campo de la segunda tabla es el que voy a utilizar para realizar la leyenda.
Gracias a todos.
Un Saludo.
_______________________________________________
gvSIG_desarrolladores mailing list
[email protected]
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de
baja en esta lista, acuda a la siguiente dirección:
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores