Statistics
| Revision:

root / trunk / extensions / extRemoteSensing / src / org / gvsig / remotesensing / PrincipalComponentsExtension.java @ 17818

History | View | Annotate | Download (4.98 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 Instituto de Desarrollo Regional and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ibez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
34
 *   Campus Universitario s/n
35
 *   02071 Alabacete
36
 *   Spain
37
 *
38
 *   +34 967 599 200
39
 */
40

    
41

    
42
package org.gvsig.remotesensing;
43

    
44
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
45
import org.gvsig.remotesensing.principalcomponents.gui.PrincipalComponentPanel;
46

    
47
import com.iver.andami.PluginServices;
48
import com.iver.andami.plugins.Extension;
49
import com.iver.cit.gvsig.fmap.MapContext;
50
import com.iver.cit.gvsig.fmap.layers.FLayers;
51
import com.iver.cit.gvsig.project.documents.view.IProjectView;
52
import com.iver.cit.gvsig.project.documents.view.gui.View;
53

    
54

    
55

    
56
/**
57
 * Extensi?n para el c?lculo de Componentes Principales.
58
 * 
59
 * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
60
 *
61
 */
62
public class PrincipalComponentsExtension extends Extension {
63
        
64
        private static final double NODATA = -99999999999999.;
65

    
66
        public void initialize() {
67
                //PrincipalComponentListManager.register();
68
        }
69

    
70
        public void execute(String actionCommand) {
71
                if (actionCommand.equals("principal_components")){
72
                        com.iver.andami.ui.mdiManager.IWindow activeWindow = PluginServices.getMDIManager().getActiveWindow();
73
                        
74
                        //si la ventana activa es de tipo Vista 
75
                        if (activeWindow instanceof View) {
76
                                PrincipalComponentPanel pcPanel = new PrincipalComponentPanel ((View)activeWindow);
77
                                PluginServices.getMDIManager().addWindow(pcPanel);
78
                                
79
                        }
80
                }
81
        }
82

    
83
        public boolean isEnabled() {
84
                com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager().getActiveWindow();
85
                if (f == null) {
86
                        return false;
87
                }
88
                if (f.getClass() == View.class) {
89
                        View vista = (View) f;
90
                        IProjectView model = vista.getModel();
91
                        MapContext mapa = model.getMapContext();
92
                        FLayers layers = mapa.getLayers();
93
                        for (int i = 0; i < layers.getLayersCount(); i++) 
94
                                if (layers.getLayer(i) instanceof FLyrRasterSE) 
95
                                        return true;
96
                }
97
                return false;
98
        }
99

    
100
        public boolean isVisible() {
101
                com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager().getActiveWindow();
102
                if (f == null) {
103
                        return false;
104
                }
105
                if (f instanceof View) {
106
                        View vista = (View) f;
107
                        IProjectView model = vista.getModel();
108
                        MapContext mapa = model.getMapContext();
109
                        return mapa.getLayers().getLayersCount() > 0;
110
                } else {
111
                        return false;
112
                }
113
        }
114
        
115
        private static double covariance(double[] xx, double x, double[] yy, double y) {
116
                
117
                double dSum = 0;
118
                int iValues = 0;
119
                
120
                for (int i = 0; i < yy.length; i++) {
121
                        if (xx[i] != NODATA && yy[i] != NODATA){                                                
122
                                dSum += (xx[i] - x) * (yy[i] - y);
123
                                iValues++;
124
                        }
125
                }
126
                if (iValues > 1){
127
                        return dSum / (double) (iValues - 1);
128
                }
129
                else{
130
                        return NODATA;
131
                }
132
        }
133

    
134
        private static double covariance(byte[][] xx, double x, byte[][] yy, double y) {
135
        
136
                double dSum = 0;
137
                int iValues = 0;
138
                
139
                for (int i = 0; i < yy.length; i++) {
140
                        for (int j = 0; j < yy[0].length; j++) {
141
                                if (xx[i][j] != NODATA && yy[i][j] != NODATA){                                                
142
                                        dSum += (xx[i][j] - x) * (yy[i][j] - y);
143
                                        iValues++;
144
                                }
145
                        }
146
                }
147
                if (iValues > 1){
148
                        return dSum / (double) (iValues - 1);
149
                }
150
                else{
151
                        return NODATA;
152
                }
153
        }
154

    
155
        //Covariance of two 1D arrays of doubles, xx and yy
156
        public static double covariance(byte[][] xx, byte[][] yy){
157
        int nx = xx.length;
158
        int ny = xx[0].length;
159
        if(nx!=yy.length)throw new IllegalArgumentException("length of x variable array, " + nx + " and length of y array, " + yy.length + " are different");
160

    
161
        double sumx=0.0D, meanx=0.0D;
162
        double sumy=0.0D, meany=0.0D;
163
        for(int i=0; i<nx; i++){
164
                for(int j=0; j<ny; j++){
165
                sumx+=xx[i][j];
166
                sumy+=yy[i][j];
167
                }
168
        }
169
        meanx=sumx/((double)nx*(double)ny);
170
        meany=sumy/((double)nx*(double)ny);
171
        double sum=0.0D;
172
        for(int i=0; i<nx; i++){
173
                for(int j=0; j<ny; j++)
174
                sum+=(xx[i][j]-meanx)*(yy[i][j]-meany);
175
        }
176
        return sum/((double)(nx*ny-1));
177
        }
178
}