[Gvsig_desarrolladores] Error en la edición de geometrías?

junquero ijunquero en uoc.edu
Mar Abr 17 09:17:34 CEST 2012


Hola

Estoy desarrollando un driver para JASPA. La lectura ya más o menos la
controlo, y ahora esto viendo cómo permitir la edición de geometrías en
gvSIG y almacenarlas en la BD.

Por situar el contexto de la pregunta:

1. He comprobado que un FeatureType con geometrías de tipo MULTILINESTRING,
las convierto a tipo Geometry.TYPES.MULTICURVE, y que cuando veo el diálogo
de propiedades de la capa, en la pestaña General, me aparece Tipo:
MultiCurve2D. Creo que hasta ahí todo va bien.

2. Habilito el modo edición de la capa y creo una línea simple de 2 puntos.
Me aparece el diálogo de introducción de datos con un MULTILINESTRING con
las coordenadas que he puesto. Termino el modo de edición, guardo los
cambios, y se almacenan correctamente.
3. Habilito el modo edición de la capa, creo un rectángulo y.... me aparece
el diálogo de introducción de datos con un *POLYGON*!!!

El problema es que cuando va a grabar el dato en la base de datos, se
produce un error porque dice que el tipo de geometría no es MULTILINESTRING.

Aparte de esto, y dado que en realidad no es un POLYGON, sino un rectángulo,
perfectamente representable con un MULTILINESTRING, intento "pegarle el
cambiazo", convirtiendo el POLYGON en MULTILINESTRING, pero algo debo estar
haciendo mal, porque no lo consigo.

Lo que intento hacer es convertir el WKB del POLYGON en WKT de POLYGON,
cambiar la cadena POLYGON por MULTILINESTRIING, y volver a convertir el WKT
de MULTILINESTRING en WKB, sin embargo, el WKB final resultante vuelve a ser
POLYGON!!!!

¿Por dónde puede estar el problema?

Adjunto el trozo de código que estoy usando para dicha conversión:

Geometry g = helper.getGeometry ((byte[]) wkb);
String geometryWKT = (String) g.invokeOperation(ToWKT.CODE, null);
if (geometryWKT.startsWith("POLYGON"))
{
  geometryWKT = geometryWKT.replaceFirst("POLYGON", "MULTILINESTRING");
  try {
    // A partir de aquí geometryWKT es MULTILINESTRING
    Geometry mls = (Geometry) new WKTParser().read(geometryWKT);
    // Ahora tengo una geometría que debería ser MULTILINESTRING
    try {
       // Lo convierto a WKB
      byte[] newVal = (byte[]) mls.invokeOperation(ToWKB.CODE, null);

      // Se supone que ahora al pasarlo a WKT debería ser MULTILINESTRING,
*pero es de nuevo POLYGON  *
      Geometry ng = helper.getGeometry ((byte[]) o);
      String ngeometryWKT = (String) ng.invokeOperation(ToWKT.CODE, null);
    } catch (BaseException e) {
      throw new InvalidParameterException();
    }							
  } catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}							
						}





--
View this message in context: http://osgeo-org.1560.n6.nabble.com/Error-en-la-edicion-de-geometrias-tp4889279p4889279.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.


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