[Gvsig_desarrolladores] Error cacluladora campos v1-9
Vicente Caballero Navarro
vicente.caballero en iver.es
Lun Ene 11 11:17:50 CET 2010
Hola Julio.
Gracias por avisar sobre este error, en futuras versiones estará
solucionado, pero de momento, te puedo pasar la solución que es cambiar
el método: getParts de la clase
com.iver.cit.gvsig.fmap.core.GeometryUtilities por el siguiente:
public static ArrayList getParts(IGeometry geometry) {
ArrayList xs = new ArrayList();
ArrayList ys = new ArrayList();
ArrayList parts=new ArrayList();
double[] theData = new double[6];
//double[] aux = new double[6];
PathIterator theIterator;
int theType;
int numParts = 0;
theIterator = geometry.getPathIterator(null,
FConverter.FLATNESS); //, flatness);
boolean isClosed = false;
double firstX=0;
double firstY=0;
while (!theIterator.isDone()) {
theType = theIterator.currentSegment(theData);
switch (theType) {
case PathIterator.SEG_MOVETO:
if (numParts==0){
firstX=theData[0];
firstY=theData[1];
xs.add(new Double(theData[0]));
ys.add(new Double(theData[1]));
}else{
if (!isClosed){
Double[] x = (Double[]) xs.toArray(new
Double[0]);
Double[] y = (Double[]) ys.toArray(new
Double[0]);
parts.add(new Double[][] { x, y });
xs.clear();
ys.clear();
}
firstX=theData[0];
firstY=theData[1];
xs.add(new Double(theData[0]));
ys.add(new Double(theData[1]));
}
numParts++;
isClosed = false;
break;
case PathIterator.SEG_LINETO:
isClosed=false;
xs.add(new Double(theData[0]));
ys.add(new Double(theData[1]));
break;
case PathIterator.SEG_CLOSE:
isClosed=true;
xs.add(new Double(theData[0]));
ys.add(new Double(theData[1]));
xs.add(new Double(firstX));
ys.add(new Double(firstY));
Double[] x = (Double[]) xs.toArray(new Double[0]);
Double[] y = (Double[]) ys.toArray(new Double[0]);
parts.add(new Double[][] { x, y });
xs.clear();
ys.clear();
break;
} //end switch
theIterator.next();
} //end while loop
if (!isClosed){
isClosed=true;
xs.add(new Double(theData[0]));
ys.add(new Double(theData[1]));
Double[] x = (Double[]) xs.toArray(new Double[0]);
Double[] y = (Double[]) ys.toArray(new Double[0]);
parts.add(new Double[][] { x, y });
xs.clear();
ys.clear();
}
return parts;
}
Un saludo.
--
Vicente Caballero Navarro
Grupo desarrollo gvSIG.
IVER TI S.A.
C/ Lérida, 20
46005-Valencia
Tlf.+34963354983
www.iver.es
www.gvsig.com
Julio Torres escribió:
> Calculadora de campos en gvSIG 1.9
>
> En una capa con tres polígonos en edición cuando entro en la
> calculadora de campos, selecciono el campo "Perimetro" y calculo con
> el operador "perimeter" el valor de cálculo es erróneo. Si lo mido en
> pantalla con el comando de medir longitudes lo hace correctamente.
> Realizando el mismo proceso desde la versión 1.1.2 lo hace correctamente.
> En la captura adjunta los campos de la tabla de atributos "Perimetro"
> y "Area" estan calculados desde la versión 1.9.
> Los campos "Peri1-1-2" y "Area1-1-2" están calculados desde la versión
> 1.1.2.
> Los valores de áreas se corresponden pero los de perimetros no. Los
> valores correctos son los de la v 1-1-2
>
> Saludos de Julio Torres
>
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
Este mensaje y sus archivos son confidenciales. No está permitida su reproducción o distribución sin la autorización expresa de "IVER Tecnologías de la Información". Si usted no es el destinatario previsto, queda desautorizado cualquier uso, acceso o copia de este mensaje. Si ha recibido este mensaje por error, por favor bórrelo e infórmenos por esta misma vía.
Más información sobre la lista de distribución gvSIG_desarrolladores