[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