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@listserv.gva.es
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
--
Jorge Piera Llodrá
gvSIG software architect
PRODEVELOP
e-mail: jpi...@gvsig.com
http://www.prodevelop.es
http://www.gvsig.org
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores@listserv.gva.es
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores