[Gvsig_desarrolladores] Capas PostGIS

Francisco José Peñarrubia fpenarru en gmail.com
Mie Dic 19 18:04:11 CET 2007


Hola Angélica.

Por favor, revisa este trozo de código:

driver.setData(conn, lyrDef);
                IProjection proj = null;
                if (driver instanceof ICanReproject)
                {
                    proj = CRSFactory.getCRS("EPSG:" + 
((ICanReproject)driver).getSourceProjection(null,lyrDef));
                }
                FLayer lyr = LayerFactory.createDBLayer(driver, 
layerName, proj);

Pon un breakpoint justo ahí, en LayerFactory y asegurate de que proj no 
es null.

Lo de las proyecciones funciona así:
- Si tus datos están en la misma proyección que tu capa, no hay 
"traducción", tal y como se lee, se pinta.
- Si tus datos no están en la misma proyección que la vista: Se supone 
que hay que hacer una traducción de esos datos a la proyección de la 
vista. Eso lo hace gvSIG, pero hay algunas fuentes de datos (como 
PostGIS) que pueden entregarte las geometrías ya reproyectadas. Por eso 
al driver se le dice cual es la proyección original, y cual la deseada.

Mi consejo: No te líes => trabaja siempre con la misma proyección en tu 
vista y en tus datos, si puedes permitírtelo.

Es decir, que si la vista está en
String strEPSG = "4686";
que es lo que se desprende de tu código (la proyección de destino que tu 
quieres es la 4686, segun esto); entonces, si tu vista también tiene 
esta proyección, pon tus datos también en esa. (Asegurate de que 
driver.getSourceProjection() devuelve lo correcto. Eso se hace desde 
PostGIS, o por código. Lo mejor: desde PostGIS, escribiendo en las 
tablas de sistema. (No me acuerdo si es en GEOMETRY_COLUMNS, pero algo así).

Saludos.


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