Revision 5493

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/Statistics.java
79 79
     * @return Valor medio
80 80
     */
81 81
    public double[] getMean();
82
    
82

  
83 83
    /**
84 84
     * @return Gets median of bands
85 85
     */
......
107 107
    public int getBandCount();
108 108

  
109 109
    /**
110
     * Obtiene un valor de recorte de colas para un porcentaje dado. El valor ser? un array
111
     * bidimensional ([N?mero de bandas][2]) donde para cada banda se almacena el valor en
112
     * esa posici?n del recorte de colas. Este recorte consiste en ordenar los elementos del
113
     * raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando
114
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
115
     *
116
     * @param percent Porcentaje de recorte
117
     * @param valueByBand array bidimensional de enteros o doubles. Depende del tipo de dato del raster.
118
     * @return El valor de recorte de colas para el porcentaje dado
119
     */
120
    public Object getTailTrimValue(double percent);
121

  
122
    /**
123
     * Obtiene un valor de recorte de colas para una posici?n dada. El valor ser? un array
124
     * bidimensional ([N?mero de bandas][2]) donde para cada banda se almacena el valor en
125
     * esa posici?n del recorte de colas. Este recorte consiste en ordenar los elementos del
126
     * raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando
127
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
128
     * @param pos posici?n de recorte
129
     * @param valueByBand array bidimensional de enteros o doubles. Depende del tipo de dato del raster.
130
     * @return el valor de recorte de colas para la posici?n dada
131
     */
132
    public Object[] getTailTrimValue(int pos);
133

  
134
    /**
110 135
     * Obtiene el flag que informa de si las estad?sticas est?n calculadas o no.
111 136
     * @return true indica que est?n calculadas y false que no lo est?n
112 137
     */
......
142 167
     */
143 168
    public Histogram getHistogram();
144 169

  
145
    
146

  
147 170
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/Histogram.java
118 118
//     */
119 119
//    public double[] getMax();
120 120

  
121
    /**
122
     * Obtiene un valor de recorte de colas para un porcentaje dado. Este recorte consiste en ordenar los elementos del
123
     * raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando
124
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
125
     *
126
     * @param percent Porcentaje de recorte
127
     * @return El valor de recorte de colas para el porcentaje dado
128
     */
129
    public Object getTailTrimValue(double percent);
130

  
131
    /**
132
     * Obtiene un valor de recorte de colas para una posici?n dada. Este recorte consiste en ordenar los elementos del
133
     * raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando
134
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
135
     * @param pos posici?n de recorte
136
     * @return el valor de recorte de colas para la posici?n dada
137
     */
138
    public Object getTailTrimValue(int pos);
139

  
121 140
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/StatisticsBand.java
109 109
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
110 110
     *
111 111
     * @param percent Porcentaje de recorte
112
     * @param valueByBand array bidimensional de enteros o doubles. Depende del tipo de dato del raster.
113 112
     * @return El valor de recorte de colas para el porcentaje dado
114 113
     */
115 114
    public Object getTailTrimValue(double percent);
......
124 123
    public Object getTailTrimValue(int pos);
125 124

  
126 125
    /**
127
     * Devuelve el n?mero de valores de recorte de colas calculados.
128
     * @return N?mero de valores de recorte de colas calculados.
129
     */
130
    public int getTailTrimCount();
131

  
132
    /**
133 126
     * Obtiene el flag que informa de si las estad?sticas est?n calculadas o no.
134 127
     * @return true indica que est?n calculadas y false que no lo est?n
135 128
     */
......
158 151
     */
159 152
    public HistogramBand getHistogramBand();
160 153

  
154

  
155

  
161 156
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/statistics/HistogramBand.java
180 180
     * @return
181 181
     */
182 182
    public double getMedian();
183

  
184
    /**
185
     * Obtiene un valor de recorte de colas para un porcentaje dado. Este recorte consiste en ordenar los elementos del
186
     * raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando
187
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
188
     *
189
     * @param percent Porcentaje de recorte
190
     * @return El valor de recorte de colas para el porcentaje dado
191
     */
192
    public Object getTailTrimValue(double percent);
193

  
194
    /**
195
     * Obtiene un valor de recorte de colas para una posici?n dada. Este recorte consiste en ordenar los elementos del
196
     * raster (o una muestra de ellos) y devolver el valor que corresponde al porcentaje comenzando
197
     * desde el principio del array ordenado y desde el final de ?l (m?nimo y m?ximo).
198
     * @param pos posici?n de recorte
199
     * @return el valor de recorte de colas para la posici?n dada
200
     */
201
    public Object getTailTrimValue(int pos);
183 202
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultStatistics.java
101 101
        }
102 102
        return result;
103 103
    }
104
    
104

  
105 105
    @Override
106 106
    public double[] getMedian() {
107 107
        double[] result = new double[statisticsBands.length];
......
180 180
        return histogram;
181 181
    }
182 182

  
183
    @Override
184
    public Object getTailTrimValue(double percent) {
185
        Object[] result = new Object[statisticsBands.length];
186
        for (int i = 0; i < statisticsBands.length; i++) {
187
            result[i]=statisticsBands[i].getTailTrimValue(percent);
188
        }
189
        return result;
190
    }
191

  
192
    @Override
193
    public Object[] getTailTrimValue(int pos) {
194
        Object[] result = new Object[statisticsBands.length];
195
        for (int i = 0; i < statisticsBands.length; i++) {
196
            result[i]=statisticsBands[i].getTailTrimValue(pos);
197
        }
198
        return result;
199
    }
200

  
183 201
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultHistogram.java
41 41
        return histogramBands[band];
42 42
    }
43 43

  
44
    @Override
45
    public Object getTailTrimValue(double percent) {
46
        Object[] result = new Object[histogramBands.length];
47
        for (int i = 0; i < histogramBands.length; i++) {
48
            result[i]=histogramBands[i].getTailTrimValue(percent);
49
        }
50
        return result;
51
    }
52

  
53
    @Override
54
    public Object getTailTrimValue(int pos) {
55
        Object[] result = new Object[histogramBands.length];
56
        for (int i = 0; i < histogramBands.length; i++) {
57
            result[i]=histogramBands[i].getTailTrimValue(pos);
58
        }
59
        return result;
60
    }
61

  
44 62
//    @Override
45 63
//    public long[][] getTable() {
46 64
//        table = new long[histogramBands.length][]
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultStatisticsBand.java
145 145

  
146 146
    @Override
147 147
    public Object getTailTrimValue(double percent) {
148
        // TODO Auto-generated method stub
149
        return null;
148
        return getHistogramBand().getTailTrimValue(percent);
150 149
    }
151 150

  
152 151
    @Override
153 152
    public Object getTailTrimValue(int pos) {
154
        // TODO Auto-generated method stub
155
        return null;
153
        return getHistogramBand().getTailTrimValue(pos);
156 154
    }
157 155

  
158
    @Override
159
    public int getTailTrimCount() {
160
        // TODO Auto-generated method stub
161
        return 0;
162
    }
163

  
164 156
//    @Override
165 157
//    public long getNumberOfCells() {
166 158
//        // TODO Auto-generated method stub
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/statistics/DefaultHistogramBand.java
5 5
import java.util.List;
6 6

  
7 7
import org.gvsig.raster.lib.buffer.api.Band;
8
import org.gvsig.raster.lib.buffer.api.BufferManager;
8 9
import org.gvsig.raster.lib.buffer.api.statistics.HistogramBand;
9 10
import org.gvsig.raster.lib.buffer.api.statistics.HistogramClass;
10 11

  
......
120 121

  
121 122
    @Override
122 123
    public double getMedian() {
123
        long halfn=0;
124
        if (getBandLenght()!=0){
125
            halfn=getBandLenght()/2;
126
        }
124
        long halfn=getBandLenght()/2;
125
        return getUmpteenth(halfn);
126
    }
127

  
128
    /**
129
     * @param n
130
     * @return
131
     */
132
    private double getUmpteenth(long n) {
127 133
        long contValues=0;
128 134
        for (int i=0; i<histogramClasses.size(); i++){
129 135
            HistogramClass histogramClass=histogramClasses.get(i);
130
            if (halfn==contValues){
136
            if (n==contValues){
131 137
                return histogramClass.getMin();
132 138
            }
133 139
            long anteriorCont=contValues;
134 140
            contValues+=histogramClass.getValue();
135
            if (halfn==contValues){
141
            if (n==contValues){
136 142
                return histogramClass.getMax();
137 143
            }
138
            if (halfn<contValues){
144
            if (n<contValues){
139 145
                double median;
140 146
                if(histogramClass.getMax()-histogramClass.getMin()==0){
141 147
                    median = histogramClass.getMin();
142 148
                } else {
143
                    median=((halfn-anteriorCont)/(contValues-anteriorCont))*(histogramClass.getMax()-histogramClass.getMin());
149
                    median=((n-anteriorCont)/(contValues-anteriorCont))*(histogramClass.getMax()-histogramClass.getMin());
144 150
                }
145 151
                return median;
146 152
            }
......
149 155
        return 0;
150 156
    }
151 157

  
158
    /**
159
     * Adds value to histogram
160
     *
161
     * @param value
162
     */
152 163
    public void addValue(double value){
153 164
        HistogramClass histogramClass = getHistogramClass(value);
154 165
        if(histogramClass == null){
......
161 172
        }
162 173
    }
163 174

  
175
    @Override
176
    public Object getTailTrimValue(double percent) {
177
        if(percent>100 || percent <0){
178
            StringBuilder builder = new StringBuilder();
179
            builder.append("Percent ");
180
            builder.append(percent);
181
            builder.append(" is out of range [0,100]");
182
            throw new IllegalArgumentException(builder.toString());
183
        }
184
        long lowPosition = Math.round(getBandLenght()*percent/100);
185
        long upperPosition = Math.round(getBandLenght()*(100-percent)/100);
186

  
187
        double[] result = new double[2];
188

  
189
        result[0] = getUmpteenth(lowPosition);
190
        result[1] = getUmpteenth(upperPosition);
191
        return result;
192
    }
193

  
194
    @Override
195
    public Object getTailTrimValue(int pos) {
196
        long lowPosition = pos;
197
        long upperPosition = getBandLenght()-pos;
198

  
199
        double[] result = new double[2];
200

  
201
        result[0] = getUmpteenth(lowPosition);
202
        result[1] = getUmpteenth(upperPosition);
203
        return result;
204
    }
205

  
164 206
}

Also available in: Unified diff