[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