Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.projection / org.gvsig.projection.cresques / org.gvsig.projection.cresques.ui / src / main / java / org / cresques / ui / cts / CSSelectionModel.java @ 40559

History | View | Annotate | Download (15.4 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.cresques.ui.cts;
25

    
26
import org.cresques.cts.IProjection;
27
import org.cresques.impl.cts.ProjectionPool;
28

    
29

    
30
/**
31
 * @author Luis W. Sevilla (sevilla_lui@gva.es)
32
 */
33
public class CSSelectionModel {
34
    public static int NONE = 0x01;
35
    public static int GEODETIC = 0x02;
36
    public static int TRANSVERSAL = 0x03;
37
    public String[] datumList = {
38
            "WGS 84", "European 1950", "Datum 73",
39
            "North American Datum 1927",
40
            "North American Datum 1983",
41
            "La Canoa",
42
            "NTF (Paris)",
43
            "ETRS 89",
44
            "Moon (IAU 2000)",
45
            "Mars (IAU 2000)",
46
            "Campo_Inchauspe",
47
            "RGF93"
48
    };
49
    /*private String[] projList = {
50
        "Geodesica",
51
        "(UTM) Universal Transversal Mercator",
52
        "Datum 73 / Modified Portuguese Grid",
53
        "WGS 84 / LCC Canada",
54
        "NAD83 / NRCan LCC Canada",
55
        "Lambert Etendu",
56
        "RGF93 / Lambert-93",
57
        "WGS 84 / Mercator",
58
        "Campo Inchauspe / Zonas 1-7"
59
    };*/
60
    private String[][] projList = {
61
                {"Geodesica", "(UTM) Universal Transversal Mercator",
62
                        "LCC Canada", "Mercator"}, // WGS84
63
                {"Geodesica", "(UTM) Universal Transversal Mercator"}, // ED50
64
                {"Geodesica", "Modified Portuguese Grid"}, //Datum 73
65
                {"Geodesica", "(UTM) Universal Transversal Mercator"}, // NAD27
66
                {"Geodesica", "(UTM) Universal Transversal Mercator", "NRCan LCC Canada"}, // NAD83
67
                {"Geodesica", "(UTM) Universal Transversal Mercator"}, // La Canoa
68
                {"Geodesica", "Lambert Etendu"}, // NTF (Paris)
69
                {"Geodesica", "(UTM) Universal Transversal Mercator"}, // ETRS89
70
                {"Geodesica"}, // Moon
71
                {"Geodesica"}, // Mars
72
                {"Geodesica", "Zonas 1-7"}, // CampoInchauspe
73
                {"Geodesica", "Lambert-93"} // RFG93
74
        };
75

    
76
    private int[][] projType = {
77
            {GEODETIC, TRANSVERSAL, NONE, NONE},
78
            {GEODETIC, TRANSVERSAL},
79
            {GEODETIC, NONE},
80
            {GEODETIC, TRANSVERSAL},
81
            {GEODETIC, TRANSVERSAL, NONE},
82
            {GEODETIC, TRANSVERSAL},
83
            {GEODETIC, NONE},
84
            {GEODETIC, TRANSVERSAL},
85
            {GEODETIC},
86
            {GEODETIC},
87
            {GEODETIC, TRANSVERSAL},
88
            {GEODETIC, NONE}
89
    };
90
    
91
    private int [][] zoneRange = {
92
            {1,60},
93
            {1,60},
94
            {0,0},
95
            {3,23},
96
            {3,23},
97
            {18,21},
98
            {0,0},
99
            {28,38},
100
            {0,0},
101
            {0,0},
102
            {1,7},
103
            {0,0}
104
    };
105
    private String[] zoneList = {  };
106
    private int selectedDatum = 0;
107
    private int selectedProj = 0;
108
    private int selectedZone = 0;
109

    
110
    /**
111
     *
112
     */
113
    public CSSelectionModel() {
114
        super();
115
        zoneList = new String[60];
116

    
117
        for (int i = 1; i <= 60; i++)
118
            zoneList[i - 1] = "Huso " + Integer.toString(i);
119
    }
120
    
121

    
122
    public String[] getDatumList() {
123
        return datumList;
124
    }
125

    
126
    public String[] getProjectionList() {
127
        return projList[getSelectedDatum()];
128
    }
129

    
130
    public String[] getZoneList() {
131
            int [] r = zoneRange[getSelectedDatum()];
132
        return getZoneList(r[0],r[1]);
133
    }
134

    
135
    public String[] getZoneList(int from, int to) {
136
        zoneList = new String[to-from+1];
137

    
138
        for (int i = from; i <= to; i++)
139
                zoneList[i - from] = "Huso " + Integer.toString(i);
140
        return zoneList;
141
    }
142
    public void setSelectedDatum(int opNr) {
143
        selectedDatum = opNr;
144
    }
145

    
146
    public void setSelectedDatum(Object item) {
147
        String[] list = datumList;
148

    
149
        for (int i = 0; i < list.length; i++)
150
            if (list[i].compareTo((String) item) == 0) {
151
                selectedDatum = i;
152
                break;
153
            }
154
    }
155

    
156
    public int getSelectedDatum() {
157
        return selectedDatum;
158
    }
159

    
160
    public void setSelectedProj(int opNr) {
161
        selectedProj = opNr;
162
    }
163

    
164
    public void setSelectedProj(Object item) {
165
        String[] list = projList[getSelectedDatum()];
166

    
167
        for (int i = 0; i < list.length; i++)
168
            if (list[i].compareTo((String) item) == 0) {
169
                selectedProj = i;
170
                break;
171
            }
172
    }
173

    
174
    public int getSelectedProj() {
175
        return selectedProj;
176
    }
177

    
178
    public int getSelectedProjType() {
179
        return projType[getSelectedDatum()][selectedProj];
180
    }
181

    
182
    public void setSelectedZone(int opNr) {
183
        selectedZone = opNr;
184
    }
185

    
186
    public void setSelectedZone(Object item) {
187
        String[] list = zoneList;
188

    
189
        for (int i = 0; i < list.length; i++)
190
            if (list[i].compareTo((String) item) == 0) {
191
                selectedZone = i;
192
                break;
193
            }
194
    }
195

    
196
    public int getSelectedZone() {
197
        return selectedZone;
198
    }
199

    
200
    public void setProjection(IProjection proj) {
201
            if (proj!=null){
202
                    String key = proj.getAbrev();
203
                    // Para usos posteriores.
204
                    // String db = key.split(":")[0];
205
                    key = key.split(":")[1];
206

    
207
                    setSelectedProj(0);
208
                    setSelectedZone(-1);
209

    
210
                    if (key.endsWith("4326")) {
211
                            setSelectedDatum(0);
212
                    } else if (key.endsWith("4230")) {
213
                            setSelectedDatum(1);
214
                    } else if (key.endsWith("4274")) {
215
                            setSelectedDatum(2);
216
                    } else if (key.endsWith("4267")) {
217
                            setSelectedDatum(3);
218
                    } else if (key.endsWith("4269")) {
219
                            setSelectedDatum(4);
220
                    } else if (key.endsWith("4247")) {
221
                            setSelectedDatum(5);
222
                    } else if (key.endsWith("4807")) {
223
                            setSelectedDatum(6);
224
                    } else if (key.endsWith("4258")) {
225
                            setSelectedDatum(7);
226
                    } else if (key.endsWith("30100")) {
227
                            setSelectedDatum(8);
228
                    } else if (key.endsWith("49900")) {
229
                            setSelectedDatum(9);
230
                    } else if (key.endsWith("4221")) {
231
                            setSelectedDatum(10);
232
                    } else if (key.endsWith("4171")) {
233
                            setSelectedDatum(11);
234
                    } else if (key.startsWith("326")) {
235
                            setSelectedDatum(0);
236
                            setSelectedProj(1);
237
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));                            
238
                    } else if (key.startsWith("230")) {
239
                            setSelectedDatum(1);
240
                            setSelectedProj(1);
241
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
242
                    } else if (key.startsWith("267")) {
243
                            setSelectedDatum(3);
244
                            setSelectedProj(1);
245
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
246
                    } else if (key.startsWith("269")) {
247
                            setSelectedDatum(4);
248
                            setSelectedProj(1);
249
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
250
                    } else if (key.startsWith("247")) {
251
                            setSelectedDatum(5);
252
                            setSelectedProj(1);
253
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
254
                    } else if (key.startsWith("258")) {
255
                            setSelectedDatum(7);
256
                            setSelectedProj(1);
257
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
258
                    } else if (key.startsWith("221")) {
259
                            setSelectedDatum(10);
260
                            setSelectedProj(1);
261
                            setSelectedZone("Huso "+ Integer.parseInt(key.substring(4)));
262
                    } else if (key.endsWith("27492")) { // Datum 73 / Modified Portuguese Grid
263
                            setSelectedDatum(2);
264
                            setSelectedProj(1);
265
                            setSelectedZone(-1);
266
                    } else if (key.endsWith("42101")) { // WGS 84 / LCC Canada
267
                            setSelectedDatum(0);
268
                            setSelectedProj(2);
269
                            setSelectedZone(-1);
270
                    } else if (key.endsWith("9804")) { // WGS 84 / Mercator
271
                            setSelectedDatum(0);
272
                            setSelectedProj(3);
273
                            setSelectedZone(-1);
274
                    } else if (key.endsWith("30100")) { // Moon
275
                            setSelectedDatum(8);
276
                            setSelectedProj(0);
277
                            setSelectedZone(-1);
278
                    } else if (key.endsWith("49900")) { // Mars
279
                            setSelectedDatum(9);
280
                            setSelectedProj(0);
281
                            setSelectedZone(-1);
282
                    } else if (key.endsWith("42304")) { // NAD83 /  / LCC Canada
283
                            setSelectedDatum(4);
284
                            setSelectedProj(2);
285
                            setSelectedZone(-1);
286
                    } else if (key.endsWith("27582")) { // NTFParis /  / Lambert Etendu
287
                            setSelectedDatum(6);
288
                            setSelectedProj(1);
289
                            setSelectedZone(-1);
290
                    } else if (key.equals("2154")) { // RGF93 /  / Lambert 93
291
                            setSelectedDatum(11);
292
                            setSelectedProj(1);
293
                            setSelectedZone(-1);         
294
                    } else  {
295
                            System.err.println("CAGADA EN EL PARSING DE LA PROYECCION: " + key);
296
                    }
297
            } else {
298
                selectedDatum = 0;
299
                selectedProj = 0;
300
                selectedZone = 0;
301
            }
302
    }
303

    
304
    public IProjection getProjection() {
305
        IProjection proj = null;
306
        String datum = "326";
307

    
308
        if (selectedDatum == 0) {
309
            datum = "326";
310
            if (selectedProj == 0)
311
                return new ProjectionPool().get("EPSG:4"+datum);
312
            else if (selectedProj == 1) {
313
                String zone = Integer.toString(selectedZone + 1);
314
                if (selectedZone < 9) zone = "0" + zone;
315
                return new ProjectionPool().get("EPSG:" + datum + zone);
316
            } else if (selectedProj == 2)
317
                return new ProjectionPool().get("EPSG:42101");
318
            else if (selectedProj == 3)
319
                return new ProjectionPool().get("EPSG:9804");
320
            
321
        } else if (selectedDatum == 1) {
322
            datum = "230";
323
            if (selectedProj == 0)
324
                return new ProjectionPool().get("EPSG:4"+datum);
325
            else if (selectedProj == 1) {
326
                String zone = Integer.toString(selectedZone + 1);
327
                if (selectedZone < 9) zone = "0" + zone;
328
                return new ProjectionPool().get("EPSG:" + datum + zone);
329
            } 
330
            
331
        } else if (selectedDatum == 2) { // Lisboa 73
332
            datum = "274";
333
            if (selectedProj == 0)
334
                return new ProjectionPool().get("EPSG:4"+datum);
335
            else if (selectedProj == 1)
336
                return new ProjectionPool().get("EPSG:"+datum+"92");
337
            
338
       } else if (selectedDatum == 3) {
339
            datum = "267";
340
            if (selectedProj == 0)
341
                return new ProjectionPool().get("EPSG:4"+datum);
342
            else if (selectedProj == 1) {
343
                String zone = Integer.toString(selectedZone + 3);
344
                if (selectedZone+3 <= 9) zone = "0" + zone;
345
                return new ProjectionPool().get("EPSG:" + datum + zone);
346
            }
347
            
348
        } else if (selectedDatum == 4) {
349
            datum = "269";
350
            if (selectedProj == 0)
351
                return new ProjectionPool().get("EPSG:4"+datum);
352
            else if (selectedProj == 1) {
353
                String zone = Integer.toString(selectedZone + 3);
354
                if (selectedZone+3 <= 9) zone = "0" + zone;
355
                return new ProjectionPool().get("EPSG:" + datum + zone);
356
            } else if (selectedProj == 2)
357
                return new ProjectionPool().get("EPSG:42304");
358
            
359
        } else if (selectedDatum == 5) {
360
            datum = "247";
361
            if (selectedProj == 0)
362
                return new ProjectionPool().get("EPSG:4"+datum);
363
            else if (selectedProj == 1) {
364
                String zone = Integer.toString(selectedZone + 18);
365
                return new ProjectionPool().get("EPSG:" + datum + zone);
366
            }
367
            
368
        } else if (selectedDatum == 6) {
369
            datum = "807";
370
            if (selectedProj == 0)
371
                return new ProjectionPool().get("EPSG:4"+datum);
372
            else if (selectedProj == 1)
373
                    return new ProjectionPool().get("EPSG:27582");
374
            
375
        } else if (selectedDatum == 7) {
376
            datum = "258";
377
            if (selectedProj == 0)
378
                return new ProjectionPool().get("EPSG:4"+datum);
379
            else if (selectedProj == 1) {
380
                String zone = Integer.toString(selectedZone + 28);
381
                return new ProjectionPool().get("EPSG:" + datum + zone);
382
            }
383
            
384
        } else if (selectedDatum == 8) {
385
            datum = "30100";
386
            return new ProjectionPool().get("IAU2000:" + datum);
387
            
388
        } else if (selectedDatum == 9) {
389
            datum = "49900";
390
            return new ProjectionPool().get("IAU2000:" + datum);
391
            
392
        } else if (selectedDatum == 10) {
393
            datum = "221";
394
            if (selectedProj == 0)
395
                return new ProjectionPool().get("EPSG:4"+datum);
396
            else if (selectedProj == 1) {
397
                String zone = Integer.toString(selectedZone + 1);
398
                return new ProjectionPool().get("EPSG:" + datum + "9"+ zone);
399
            } 
400
            
401
        } else if (selectedDatum == 11) {
402
                if (selectedProj == 0)
403
                return new ProjectionPool().get("EPSG:4171");
404
            else if (selectedProj == 1)
405
                return new ProjectionPool().get("EPSG:2154");
406
        }
407

    
408
        if (selectedProj == 2) {
409
            return new ProjectionPool().get("EPSG:27492");
410
        } else if (selectedProj == 3) {
411
            return new ProjectionPool().get("EPSG:42101");
412
        } else if (selectedProj == 4) {
413
            return new ProjectionPool().get("EPSG:42304");
414
        } else if (selectedProj == 5) {
415
            return new ProjectionPool().get("EPSG:27582");
416
        } else if (selectedProj == 6) {
417
            return new ProjectionPool().get("EPSG:2154");
418
        } else if (selectedProj == 7) {
419
            return new ProjectionPool().get("EPSG:9804");
420
        } else if (selectedProj == 8) {
421
                datum = "221";
422
                 String zone = "9";
423
            //if (selectedDatum == 10) {
424
                 if (selectedZone < 1) {
425
                     zone += "1";
426
                 } else if (selectedZone > 7) {
427
                     zone += "7";
428
                 } else
429
                         zone += (selectedZone+1)+"";
430
            // }
431
             return new ProjectionPool().get("EPSG:" + datum + zone);
432
         }
433

    
434

    
435
        if (selectedProj == 0) {
436
            return new ProjectionPool().get("EPSG:4" + datum);
437
        } else if (selectedProj == 1) {
438
            String Zone = Integer.toString(selectedZone + 1);
439

    
440
            if (selectedZone < 9) {
441
                Zone = "0" + Zone;
442
            }
443

    
444
            if ((selectedDatum == 2) || (selectedDatum == 3)) {
445
                if (selectedZone < 3) {
446
                    Zone = "03";
447
                }
448

    
449
                if (selectedZone > 23) {
450
                    Zone = "23";
451
                }
452
            }
453

    
454
            if (selectedDatum == 5) {
455
                if (selectedZone < 18) {
456
                    Zone = "18";
457
                }
458

    
459
                if (selectedZone > 22) {
460
                    Zone = "22";
461
                }
462
            }
463

    
464
            if (selectedDatum == 7) {
465
                if (selectedZone < 28) {
466
                    Zone = "28";
467
                }
468

    
469
                if (selectedZone > 38) {
470
                    Zone = "38";
471
                }
472
            }
473
            return new ProjectionPool().get("EPSG:" + datum + Zone);
474
        } 
475

    
476
        return proj;
477
    }
478
}