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 | 40559 | jjdelcerro | /**
|
---|---|---|---|
2 | * gvSIG. Desktop Geographic Information System.
|
||
3 | 40455 | jjdelcerro | *
|
4 | 40559 | jjdelcerro | * Copyright (C) 2007-2013 gvSIG Association.
|
5 | 40455 | jjdelcerro | *
|
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 | 40559 | jjdelcerro | * as published by the Free Software Foundation; either version 3
|
9 | 40455 | jjdelcerro | * 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 | 40559 | jjdelcerro | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19 | * MA 02110-1301, USA.
|
||
20 | 40455 | jjdelcerro | *
|
21 | 40559 | jjdelcerro | * For any additional information, do not hesitate to contact us
|
22 | * at info AT gvsig.com, or visit our website www.gvsig.com.
|
||
23 | 40455 | jjdelcerro | */
|
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 | } |