Revision 2102 branches/gvSIG_03_SLD/applications/appgvSIG/src/com/iver/cit/gvsig/gui/thememanager/legendmanager/panels/NaturalIntervalGenerator.java
NaturalIntervalGenerator.java | ||
---|---|---|
60 | 60 |
private int miNumIntervalosSolicitados; |
61 | 61 |
private int miNumIntervalosGenerados; |
62 | 62 |
private double[] mdaValoresRuptura; |
63 |
private double[] mdaValInit; |
|
63 | 64 |
|
64 | 65 |
/** |
65 | 66 |
* Crea un nuevo IntervalGenerator. |
... | ... | |
210 | 211 |
// 'S?lo se pueden generar dos intervalos -> hay un valor de ruptura |
211 | 212 |
///ReDim mdaValoresRuptura(0) |
212 | 213 |
mdaValoresRuptura[0] = ((udtDatosEstudio) lVectorDatos.get(0)).Valor; |
214 |
mdaValInit[0] = ((udtDatosEstudio) lVectorDatos.get(0)).Valor; |
|
213 | 215 |
miNumIntervalosGenerados = 2; |
214 | 216 |
|
215 | 217 |
return true; |
... | ... | |
227 | 229 |
llaIndicesRupturas = new int[liNumClasesReales - 1]; |
228 | 230 |
llNumElementosPorClase = (lVectorDatos.size()) / liNumClasesReales; |
229 | 231 |
|
230 |
for (i = 0; i <llaIndicesRupturas.length; i++) { |
|
232 |
for (i = 0; i < llaIndicesRupturas.length; i++) {
|
|
231 | 233 |
if (i == 0) { |
232 | 234 |
llaIndicesRupturas[i] = llNumElementosPorClase - 1; |
233 | 235 |
} else { |
... | ... | |
236 | 238 |
} |
237 | 239 |
} |
238 | 240 |
|
239 |
udtDatosClase[] ldaSDCM_Parciales = new udtDatosClase[llaIndicesRupturas.length+1]; |
|
240 |
udtDatosClase[] ldaSDCM_Validos = new udtDatosClase[llaIndicesRupturas.length+1]; |
|
241 |
udtDatosClase[] ldaSDCM_Parciales = new udtDatosClase[llaIndicesRupturas.length + |
|
242 |
1]; |
|
243 |
udtDatosClase[] ldaSDCM_Validos = new udtDatosClase[llaIndicesRupturas.length + |
|
244 |
1]; |
|
241 | 245 |
|
242 | 246 |
///ReDim ldaSDCM_Parciales(UBound(llaIndicesRupturas()) + 1) |
243 | 247 |
///ReDim ldaSDCM_Validos(UBound(ldaSDCM_Parciales()) + 1) |
244 |
if (llaIndicesRupturas.length==0)return true; |
|
248 |
if (llaIndicesRupturas.length == 0) { |
|
249 |
return true; |
|
250 |
} |
|
251 |
|
|
245 | 252 |
// 'Calcular la bondad inicial |
246 | 253 |
if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales, llaIndicesRupturas, |
247 |
ldSDAM[0], ldUltimaGVF, -1,false)) { |
|
254 |
ldSDAM[0], ldUltimaGVF, -1, false)) {
|
|
248 | 255 |
return false; |
249 | 256 |
} |
250 | 257 |
|
... | ... | |
350 | 357 |
llIndiceRupturaOriginal = llaIndicesRupturas[i]; |
351 | 358 |
|
352 | 359 |
if (lbMoverADerecha) { |
353 |
if (i == llaIndicesRupturas.length-1) {
|
|
360 |
if (i == (llaIndicesRupturas.length - 1)) {
|
|
354 | 361 |
if ((llaIndicesRupturas[i] + 1) >= lVectorDatos.size()) { |
355 | 362 |
exit = true; |
356 | 363 |
} |
... | ... | |
376 | 383 |
} |
377 | 384 |
} //'If i = LBound(llaIndicesRupturas) Then |
378 | 385 |
|
379 |
llaIndicesRupturas[i] = llaIndicesRupturas[i]-1;//////////////////
|
|
386 |
llaIndicesRupturas[i] = llaIndicesRupturas[i] - 1; //////////////////
|
|
380 | 387 |
} //'If lbMoverADerecha Then |
381 | 388 |
|
382 | 389 |
if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales, |
... | ... | |
407 | 414 |
|
408 | 415 |
// 'A partir de aqu? ya no se puede cancelar nada |
409 | 416 |
mdaValoresRuptura = new double[llaIndicesRupturas.length]; |
417 |
mdaValInit = new double[llaIndicesRupturas.length]; |
|
410 | 418 |
|
411 | 419 |
for (i = 0; i < mdaValoresRuptura.length; i++) { // LBound(mdaValoresRuptura) To UBound(mdaValoresRuptura) |
412 | 420 |
mdaValoresRuptura[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i])).Valor; |
413 | 421 |
|
422 |
if ((llaIndicesRupturas[i] + 1) < lVectorDatos.size()) { |
|
423 |
mdaValInit[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i] + |
|
424 |
1)).Valor; |
|
425 |
} else { |
|
426 |
mdaValInit[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i])).Valor; |
|
427 |
} |
|
428 |
|
|
414 | 429 |
// 'Hay que aplicar una peque?a correcci?n a los valores de ruptura para que los intervalos que genera |
415 | 430 |
// 'mapobjects se aprechen en su totalidad, o lo que es lo mismo, vengan todos representados en el mapa. |
416 | 431 |
// 'Con esto tambi?n se consigue hallar intervalos equivalentes a los de ArcView. Esta correcci?n consiste |
... | ... | |
425 | 440 |
|
426 | 441 |
return true; |
427 | 442 |
} |
428 |
private udtDatosClase[] getArray(udtDatosClase[] array){ |
|
429 |
udtDatosClase[] aux=new udtDatosClase[array.length]; |
|
430 |
for (int i=0;i<array.length;i++){ |
|
431 |
aux[i]=new udtDatosClase(); |
|
432 |
aux[i].Media=array[i].Media; |
|
433 |
aux[i].NumElementos=array[i].NumElementos; |
|
434 |
aux[i].SDCM=array[i].SDCM; |
|
435 |
aux[i].SumaCuadradoTotal=array[i].SumaCuadradoTotal; |
|
436 |
aux[i].SumaTotal=array[i].SumaTotal; |
|
443 |
|
|
444 |
/** |
|
445 |
* DOCUMENT ME! |
|
446 |
* |
|
447 |
* @param array DOCUMENT ME! |
|
448 |
* |
|
449 |
* @return DOCUMENT ME! |
|
450 |
*/ |
|
451 |
private udtDatosClase[] getArray(udtDatosClase[] array) { |
|
452 |
udtDatosClase[] aux = new udtDatosClase[array.length]; |
|
453 |
|
|
454 |
for (int i = 0; i < array.length; i++) { |
|
455 |
aux[i] = new udtDatosClase(); |
|
456 |
aux[i].Media = array[i].Media; |
|
457 |
aux[i].NumElementos = array[i].NumElementos; |
|
458 |
aux[i].SDCM = array[i].SDCM; |
|
459 |
aux[i].SumaCuadradoTotal = array[i].SumaCuadradoTotal; |
|
460 |
aux[i].SumaTotal = array[i].SumaTotal; |
|
437 | 461 |
} |
438 |
return aux; |
|
462 |
|
|
463 |
return aux; |
|
439 | 464 |
} |
465 |
|
|
440 | 466 |
/** |
441 | 467 |
* Devuelve la "SDAM" de un conjunto de datos que vienen almacenados en el |
442 | 468 |
* vector rVectorDatos |
... | ... | |
624 | 650 |
|
625 | 651 |
//'Falta la ?ltima clase |
626 | 652 |
if (!mbGetDatosClase(rVectorDatos, |
627 |
rlaIndicesRuptura[rlaIndicesRuptura.length-1] + 1,
|
|
628 |
rVectorDatos.size()-1, raClases, raClases.length-1)) {
|
|
653 |
rlaIndicesRuptura[rlaIndicesRuptura.length - 1] + 1,
|
|
654 |
rVectorDatos.size() - 1, raClases, raClases.length - 1)) {
|
|
629 | 655 |
return false; |
630 | 656 |
} |
631 | 657 |
} else { |
... | ... | |
634 | 660 |
//'Hay que determinar para qu? clases debemos volver a recalcular los datos en funci?n del ?ndice de ruptura que estamos modificando |
635 | 661 |
if (vbDesplazAIzquierda) { |
636 | 662 |
// 'Recalcular los datos de la clase izquierda |
637 |
if (!mbRecalcularDatosClase(raClases,i, rVectorDatos, |
|
663 |
if (!mbRecalcularDatosClase(raClases, i, rVectorDatos,
|
|
638 | 664 |
rlaIndicesRuptura[i] + 1, vdSDAM, false)) { |
639 | 665 |
return false; |
640 | 666 |
} |
641 | 667 |
|
642 | 668 |
// 'Recalcular los datos de la clase derecha |
643 |
if (!mbRecalcularDatosClase(raClases,i + 1, rVectorDatos, |
|
669 |
if (!mbRecalcularDatosClase(raClases, i + 1, rVectorDatos,
|
|
644 | 670 |
rlaIndicesRuptura[i] + 1, vdSDAM, true)) { |
645 | 671 |
return false; |
646 | 672 |
} |
647 | 673 |
} else { |
648 | 674 |
// 'Recalcular los datos de la clase izquierda |
649 |
if (!mbRecalcularDatosClase(raClases,i, rVectorDatos, |
|
675 |
if (!mbRecalcularDatosClase(raClases, i, rVectorDatos,
|
|
650 | 676 |
rlaIndicesRuptura[i], vdSDAM, true)) { |
651 | 677 |
return false; |
652 | 678 |
} |
653 | 679 |
|
654 | 680 |
// 'Recalcular los datos de la clase derecha |
655 |
if (!mbRecalcularDatosClase(raClases,i + 1, rVectorDatos, |
|
681 |
if (!mbRecalcularDatosClase(raClases, i + 1, rVectorDatos,
|
|
656 | 682 |
rlaIndicesRuptura[i], vdSDAM, false)) { |
657 | 683 |
return false; |
658 | 684 |
} |
... | ... | |
701 | 727 |
|
702 | 728 |
// 'Inicializamos los datos de la clase |
703 | 729 |
rClase[numClas] = new udtDatosClase(); |
704 |
|
|
730 |
|
|
705 | 731 |
//'Hallamos la media de la clase |
706 |
for (i = vlLimiteInf; i < vlLimiteSup+1; i++) {
|
|
732 |
for (i = vlLimiteInf; i < (vlLimiteSup + 1); i++) {
|
|
707 | 733 |
rClase[numClas].NumElementos = rClase[numClas].NumElementos + |
708 | 734 |
((udtDatosEstudio) rVectorDatos.get(i)).Coincidencias; |
709 | 735 |
|
... | ... | |
730 | 756 |
* Recalcula los datos de las clases. |
731 | 757 |
* |
732 | 758 |
* @param rClase Clases. |
759 |
* @param i ?adir ?adir ?adir ?adir indica si a la clase se le a?ade un |
|
760 |
* elemento (True) o se le quita (False) |
|
733 | 761 |
* @param rVectorDatos Datos. |
734 | 762 |
* @param vlIndiceElemento es el ?ndice del elemento que se le va a?adir o |
735 | 763 |
* a quitar a la clase |
736 | 764 |
* @param vdSDAM desviaci?n standard. |
737 |
* @param vbA ?adir ?adir ?adir ?adir indica si a la clase se le a?ade un |
|
738 |
* elemento (True) o se le quita (False) |
|
765 |
* @param vbA ?adir DOCUMENT ME! |
|
739 | 766 |
* |
740 | 767 |
* @return True si se ha calculado correctamente. |
741 | 768 |
*/ |
742 |
private boolean mbRecalcularDatosClase(udtDatosClase[] rClase,int i, |
|
769 |
private boolean mbRecalcularDatosClase(udtDatosClase[] rClase, int i,
|
|
743 | 770 |
ArrayList rVectorDatos, int vlIndiceElemento, double vdSDAM, |
744 | 771 |
boolean vbA?adir) { |
745 | 772 |
double ldValor; |
... | ... | |
760 | 787 |
//'Actualizamos el producto total |
761 | 788 |
//'rClase.ProductoTotal = rClase.ProductoTotal * (ldValor * llNumCoincidencias) |
762 | 789 |
//'Actualizamos el n? de elementos |
763 |
rClase[i].NumElementos = rClase[i].NumElementos + llNumCoincidencias; |
|
790 |
rClase[i].NumElementos = rClase[i].NumElementos + |
|
791 |
llNumCoincidencias; |
|
764 | 792 |
} else { |
765 | 793 |
//'Actualizamos la suma total |
766 | 794 |
rClase[i].SumaTotal = rClase[i].SumaTotal - |
... | ... | |
773 | 801 |
// 'Actualizamos el producto total |
774 | 802 |
// 'rClase.ProductoTotal = rClase.ProductoTotal / (ldValor * llNumCoincidencias) |
775 | 803 |
// 'Actualizamos el n? de elementos |
776 |
rClase[i].NumElementos = rClase[i].NumElementos - llNumCoincidencias; |
|
804 |
rClase[i].NumElementos = rClase[i].NumElementos - |
|
805 |
llNumCoincidencias; |
|
777 | 806 |
} // 'If vbA?adir Then |
778 | 807 |
|
779 | 808 |
//'Obtenemos la nueva media |
... | ... | |
800 | 829 |
} |
801 | 830 |
|
802 | 831 |
/** |
832 |
* Devuelve el valor inicial de cada intervalo |
|
833 |
* |
|
834 |
* @param index ?ndice del intervalo |
|
835 |
* |
|
836 |
* @return valor del intervalo. |
|
837 |
*/ |
|
838 |
public double getValInit(int index) { |
|
839 |
return mdaValInit[index]; |
|
840 |
} |
|
841 |
|
|
842 |
/** |
|
803 | 843 |
* Devuelve el n?mero de intervalos que se pueden representar, no tiene |
804 | 844 |
* porque coincidir con el n?mero de intervalos que se piden. |
805 | 845 |
* |
Also available in: Unified diff