[Gvsig_desarrolladores] Escribiendo SHP con fmap

Cèsar Ordiñana cordinyana en gvsig.com
Mar Jul 19 11:07:33 CEST 2011


Hola,

El 19/07/11 10:42, Víctor González escribió:
> 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.

Entonces puedes usar las operaciones sobre geometrías. En este caso, la 
operación fromJTS. Ej:

         GeometryOperationContext ctx = new GeometryOperationContext();
         ctx.setAttribute(FromJTS.PARAM, jtsGeom);
         Geometry gvsigGeom = 
(Geometry)geometryManager.invokeOperation(FromJTS.NAME, ctx);

Si fueras a aplicar la misma operación a muchas geometrías también 
puedes obtener la operación mediante el método 
GeometryManager.getGeometryOperation().

Saludos,

-- 
Cèsar Ordiñana Navarro
gvSIG software architect
DiSiD Technologies (http://www.disid.com)


>
> Un saludo y gracias otra vez,
> Víctor.
>
> El 18 de julio de 2011 17:09, Jorge Piera Llodrá <jpiera en gvsig.com 
> <mailto: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 list
>         gvSIG_desarrolladores en listserv.gva.es  <mailto:gvSIG_desarrolladores en listserv.gva.es>
>         http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>            
>
>
>
>     -- 
>     Jorge Piera Llodrá
>     gvSIG software architect
>     PRODEVELOP
>     e-mail:jpiera en gvsig.com  <mailto:jpiera en gvsig.com>
>     http://www.prodevelop.es
>     http://www.gvsig.org
>

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20110719/18e07dbd/attachment.htm 


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