[Gvsig_desarrolladores] Escribiendo SHP con fmap

Víctor González victorzinho en gmail.com
Mar Jul 19 10:42:52 CEST 2011


Hola,

Lo de la constante y lo de la precisión ya está solucionado, gracias ;-)

En cuanto a pasar la geometría de JTS a fmap, la verdad es que en el ejemplo
que he puesto es un poco absurdo, pero el caso es que el wrapper que estoy
intentando hacer en parte consiste en coger las geometrías de JTS que gasta
GGL2 y escribirlas con gvSIG.

Un saludo y gracias otra vez,
Víctor.

El 18 de julio de 2011 17:09, Jorge Piera Llodrá <jpiera en gvsig.com>escribió:

> **
> Hola.
>
>
>
>
> On 07/18/2011 12:42 PM, Víctor González wrote:
>
> Hola,
>
> Estoy intentando escribir shapefiles con gvSIG y me han salido bastantes
> dudas y problemas que he intentado aislar en el siguiente método main:
>
> 1     public static void main(String[] args) throws Exception {
> 2         new DefaultLibrariesInitializer().fullInitialize();
> 3         DataManager manager = DALLocator.getDataManager();
> 4
> 5         EditableFeatureType type = new DefaultEditableFeatureType();
> 6         type.add("geom", 66).setGeometryType(Geometry.TYPES.POINT)
> 7                 .setGeometrySubType(Geometry.SUBTYPES.GEOM2D)
> 8                 .setObjectClass(Geometry.class);
> 9         type.add("double", DataTypes.DOUBLE);
> 10
> 11        NewFeatureStoreParameters destParams =
> (NewFeatureStoreParameters) manager
> 12                .createNewStoreParameters("FilesystemExplorer", "Shape");
> 13        destParams.setDynValue("shpfile", "/tmp/mySHP.shp");
> 14        destParams.setDynValue("dbffile", "/tmp/mySHP.dbf");
> 15        destParams.setDynValue("shxfile", "/tmp/mySHP.shx");
> 16        destParams.setDynValue("crs", "EPSG:23030");
> 17        destParams.setDefaultFeatureType(type);
> 18
> 19        manager.newStore("FilesystemExplorer", "Shape", destParams,
> true);
> 20        FeatureStore store = (FeatureStore) manager.openStore("Shape",
> 21                destParams);
> 22
> 23        store.edit();
> 24        EditableFeature feature = store.createNewFeature().getEditable();
> 25        com.vividsolutions.jts.geom.Geometry g = new GeometryFactory()
> 26                .createPoint(new Coordinate(0, 0));
> 27        Geometry fmapGeom = Converter.jtsToGeometry(g);
> 28        feature.set(feature.getType().getDefaultGeometryAttributeIndex(),
> 29                fmapGeom);
> 30        feature.set("double", 57.0);
> 31        store.insert(feature);
> 32        store.finishEditing();
> 33    }
>
> Como veis, trato de escribir un único registro en un shp que tiene dos
> campos: la geometría y un real. Mis dudas y problemas son:
>
>    - En la línea 6, para indicar que el tipo es geométrico pongo un 66,
>    que es lo que he observado que me ha devuelto en otros casos al leer, pero
>    no he encontrado en DataTypes (ni en otro sitio) una constante para
>    identificar esto.
>
>  La constante que buscas está en el proyecto de gemetrías, concretamente la
> clase se llama org.gvsig.fmap.geom.DataTypes. El DataTypes de tools tiene
> los tipos básicos y hay algunas librerías que aportan nuevos tipos de datos.
> En concreto, la librería de geometrías tiene un DataTypes que define el tipo
> GEOMETRY y ENVELOPE.
>
>
>    - En la línea 27, Converter está marcado como @deprecated, pero no he
>    encontrado ninguna alternativa para convertir una geometría de JTS a fmap.
>
>  Bueno, la idea es que no tengas que crear una geometría de JTS y que
> puedas crear directamente la geometría de gvSIG. Crear un punto en 2
> dimensiones con las coordenadas 0,0 se haría así:
>
> GeometryManager geometryManager = GeometryLocator.getGeometryManager();
> Point point = geometryManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D);
>
> Y ese punto ya lo puedes añadir a la feature de gvSIG sin tener que
> convertir nada a JTS.
>
>
>    - Cuando intento abrir el shp que he escrito con geotools, me dice que
>    "ShapeType changed illegally from PointZ to Point".
>
>  Aquí no te sabría responder...
>
>
>    - Con gvSIG Desktop puedo abrir el shapefile, pero cuando lo muestro en
>    una tabla, me aparece que el valor de "double" es 5.0. Si lo leo mediante
>    código el resultado es el mismo. He probado a cambiar el valor del double a
>    34.0 así arbitrariamente y entonces se escribe un 3.0
>
>  Parece ser que tienes un problema de precisión. El método add del
> EditableFeatureType devuelve un EditableFeatureAttributeDescriptor que tiene
> un setSize. Es como si la longitud por defecto fuese de 1.
>
> Un saludo,
> Jorge
>
>
>
> Pues eso es todo. Con respecto a las dos primeras cuestiones, la
> documentación que he mirado es la de la web [1][2]. Para las dos últimas, no
> tengo muy claro si es que no he utilizado la api correctamente, o es un bug
> o qué.
>
> Gracias de antemano,
> Víctor.
>
> [1]
> http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/org.gvsig.fmap.dal
> [2]
> http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/org.gvsig.fmap.geom
>
>
> _______________________________________________
> gvSIG_desarrolladores mailing listgvSIG_desarrolladores en listserv.gva.eshttp://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>
>
> --
> Jorge Piera Llodrá
> gvSIG software architect
> PRODEVELOP
> e-mail: jpiera en gvsig.comhttp://www.prodevelop.eshttp://www.gvsig.org
>
>
> _______________________________________________
> 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/20110719/74428ccd/attachment.htm 


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