[Gvsig_desarrolladores] Escribiendo SHP con fmap

Víctor González victorzinho en gmail.com
Lun Jul 18 12:42:18 CEST 2011


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.
   - 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.
   - Cuando intento abrir el shp que he escrito con geotools, me dice que
   "ShapeType changed illegally from PointZ to Point".
   - 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

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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20110718/6a5492f6/attachment.htm 


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