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.impl / src / main / java / org / cresques / impl / cts / ProjectionPool.java @ 40559

History | View | Annotate | Download (16.5 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.impl.cts;
25

    
26
import java.util.ArrayList;
27
import java.util.Iterator;
28
import java.util.Map;
29
import java.util.TreeMap;
30

    
31
import org.cresques.cts.ICRSFactory;
32
import org.cresques.cts.IProjection;
33
import org.cresques.impl.cts.gt2.CSDatum;
34
import org.cresques.impl.cts.gt2.CSGaussPt;
35
import org.cresques.impl.cts.gt2.CSLambertCC;
36
import org.cresques.impl.cts.gt2.CSMercator;
37
import org.cresques.impl.cts.gt2.CSUTM;
38
import org.cresques.impl.cts.gt2.CoordSys;
39

    
40

    
41
/**
42
 * Pool de proyeccions (cs+datum) conocidas.
43
 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
44
 */
45
public class ProjectionPool implements ICRSFactory {
46
    static TreeMap data = null;
47

    
48
    static {
49
        CoordSys cs = null;
50
        data = new TreeMap();
51

    
52
        cs = (new CSUTM(CSDatum.wgs84, 30)).toGeo();
53
        cs.setAbrev("EPSG:4326"); // WGS84 (World Geodesic Datum)
54
        data.put(cs.getAbrev(), cs);
55
        data.put("CRS:84", cs); // CRS:84 = EPSG:4326
56

    
57
        cs = (new CSUTM(CSDatum.ed50, 30)).toGeo();
58
        cs.setAbrev("EPSG:4230"); // Datum Europeu Internacional ED50
59
        data.put(cs.getAbrev(), cs);
60

    
61
        cs = (new CSUTM(CSDatum.d73, 30)).toGeo();
62
        cs.setAbrev("EPSG:4274"); // Datum 73 de Lisboa
63
        data.put(cs.getAbrev(), cs);
64

    
65
        cs = (new CSUTM(CSDatum.nad27, 30)).toGeo();
66
        cs.setAbrev("EPSG:4267"); // NAD 27
67
        data.put(cs.getAbrev(), cs);
68

    
69
        cs = (new CSUTM(CSDatum.nad83, 30)).toGeo();
70
        cs.setAbrev("EPSG:4269"); // NAD 83
71
        data.put(cs.getAbrev(), cs);
72

    
73
        cs = (new CSUTM(CSDatum.lomaQuintana, 30)).toGeo();
74
        cs.setAbrev("EPSG:4288"); // PSAD 56 'Loma Quintana'
75
        data.put(cs.getAbrev(), cs);
76

    
77
        cs = (new CSUTM(CSDatum.laCanoa, 30)).toGeo();
78
        cs.setAbrev("EPSG:4247"); // PSAD 56 'Loma Quintana'
79
        data.put(cs.getAbrev(), cs);
80

    
81
        cs = (new CSUTM(CSDatum.ntfParis, 30)).toGeo();
82
        cs.setAbrev("EPSG:4807"); // NTF Paris
83
        data.put(cs.getAbrev(), cs);
84

    
85
        cs = (new CSUTM(CSDatum.etrs89, 30)).toGeo();
86
        cs.setAbrev("EPSG:4258"); // ETRS 89
87
        data.put(cs.getAbrev(), cs);
88
        for (int i = 1; i <= 60; i++) {
89
            String huso = Integer.toString(i);
90

    
91
            if (i < 10) {
92
                huso = "0" + huso;
93
            }
94

    
95
            cs = new CSUTM(CSDatum.wgs84, i);
96
            cs.setAbrev("EPSG:326" + huso);
97
            data.put(cs.getAbrev(), cs);
98

    
99
            cs = new CSUTM(CSDatum.ed50, i);
100
            cs.setAbrev("EPSG:230" + huso);
101
            data.put(cs.getAbrev(), cs);
102
            if (i>2 && i<=23) {
103
                cs = new CSUTM(CSDatum.nad27, i);
104
                cs.setAbrev("EPSG:267" + huso);
105
                data.put(cs.getAbrev(), cs);
106

    
107
                cs = new CSUTM(CSDatum.nad83, i);
108
                cs.setAbrev("EPSG:269" + huso);
109
                data.put(cs.getAbrev(), cs);
110
            }
111
            if (i>27 && i<39) {
112
                cs = new CSUTM(CSDatum.etrs89, i);
113
                cs.setAbrev("EPSG:258" + huso);
114
                data.put(cs.getAbrev(), cs);
115
            }
116
        }
117

    
118
        cs = CSGaussPt.hgd73;
119
        cs.setAbrev("EPSG:27492"); // Projec??o Gauss do Datum 73 de Lisboa (no EPSG found)
120
        data.put(cs.getAbrev(), cs);
121

    
122
        cs = new CSUTM(CSDatum.d73, 29);
123
        cs.setAbrev("EPSG:27429"); // Projec??o Gauss do Datum 73 de Lisboa (no EPSG found)
124
        data.put(cs.getAbrev(), cs);
125

    
126
        for (int i = 18; i <= 21; i++) {
127
            String huso = Integer.toString(i);
128

    
129
            if (i < 10) {
130
                huso = "0" + huso;
131
            }
132

    
133
            cs = new CSUTM(CSDatum.laCanoa, i);
134
            cs.setAbrev("EPSG:247" + huso);
135
            data.put(cs.getAbrev(), cs);
136
        }
137

    
138
        for (int i = 16; i <= 22; i++) {
139
            String huso = Integer.toString(i);
140
            // Psad56 Ecuador
141
            cs = new CSUTM(CSDatum.lomaQuintana, i);
142
            cs.setAbrev("EPSG:288" + huso);
143
            data.put(cs.getAbrev(), cs);
144
            cs = new CSUTM(CSDatum.lomaQuintana, i, "S");
145
            cs.setAbrev("EPSG:288" + (i+60) );
146
            data.put(cs.getAbrev(), cs);
147
        }
148

    
149
        //                cs = new CSLambertCC(CSDatum.nad27, -105D, 49D, 49D, 77D, 0, 0);
150
        //                cs.setAbrev("LCCCan");
151
        //                data.put(cs.getAbrev(), cs);
152
        /* Para el server WMS de canad?:
153
         * EPSG:42101
154
         * EPSG:42304
155
         * EPSG:4269
156
         */
157
        /*
158
         * 42101,PROJCS["WGS 84 / LCC Canada",
159
         * GEOGCS["WGS 84",DATUM["WGS_1984",
160
         * SPHEROID["WGS_1984",6378137,298.257223563]],
161
         * PRIMEM["Greenwich",0],UNIT["Decimal_Degree",0.0174532925199433]],
162
         *
163
         * PROJECTION["Lambert_Conformal_Conic_2SP"],
164
         * PARAMETER["central_meridian",-95.0],
165
         * PARAMETER["latitude_of_origin",0],
166
         * PARAMETER["standard_parallel_1",49.0],
167
         * PARAMETER["standard_parallel_2",77.0],
168
         * PARAMETER["false_easting",0.0],
169
         * PARAMETER["false_northing",-8000000.0],
170
         * UNIT["Meter",1],AUTHORITY["EPSG","42101"]]
171
         */
172
        cs = new CSLambertCC(CSDatum.wgs84, -95, 0, 49, 77, 0, -8000000.0);
173
        cs.setAbrev("EPSG:42101");
174
        data.put(cs.getAbrev(), cs);
175

    
176
        /* 42304,PROJCS["NAD83 / NRCan LCC Canada",
177
         * GEOGCS["NAD83",DATUM["North_American_Datum_1983",
178
         * SPHEROID["GRS_1980",6378137,298.257222101]],
179
         * PRIMEM["Greenwich",0],
180
         * UNIT["Decimal_Degree",0.0174532925199433]],
181
         *
182
         * PROJECTION["Lambert_Conformal_Conic_2SP"],
183
         * PARAMETER["central_meridian",-95.0],
184
         * PARAMETER["latitude_of_origin",49.0],
185
         * PARAMETER["standard_parallel_1",49.0],
186
         * PARAMETER["standard_parallel_2",77.0],
187
         * PARAMETER["false_easting",0.0],
188
         * PARAMETER["false_northing",0.0],
189
         * UNIT["Meter",1],AUTHORITY["EPSG","42304"]]
190
         */
191
        cs = new CSLambertCC(CSDatum.nad83, -95, 49, 49, 77, 0, 0);
192
        cs.setAbrev("EPSG:42304");
193
        data.put(cs.getAbrev(), cs);
194

    
195
        /*
196
         * EPSG:26915 - NAD83 / UTM zone 15N
197
         * EPSG:31466 - Gau?-Kr?ger band 2
198
         * EPSG:31467 - Gau?-Kr?ger band 3
199
         * EPSG:4314  - DHDN
200
         */
201
        /*
202
         * 27572=PROJCS["NTF (Paris) / Lambert zone II",
203
             GEOGCS["NTF (Paris)",
204
                    DATUM["Nouvelle_Triangulation_Francaise_Paris",
205
                          SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936269,
206
                                   AUTHORITY["EPSG","7011"]],
207
                          TOWGS84[-168,-60,320,0,0,0,0],
208
                          AUTHORITY["EPSG","6807"]],
209
                    PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],
210
                    UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],
211
                    AUTHORITY["EPSG","4807"]],
212
             PROJECTION["Lambert_Conformal_Conic_1SP"],
213
                        PARAMETER["latitude_of_origin",52],
214
                        PARAMETER["central_meridian",0],
215
                        PARAMETER["scale_factor",0.99987742],
216
                        PARAMETER["false_easting",600000],
217
                        PARAMETER["false_northing",2200000],
218
                        UNIT["metre",1,AUTHORITY["EPSG","9001"]],
219
                        AUTHORITY["EPSG","27572"]]
220
         */
221

    
222
        cs = new CSLambertCC(CSDatum.ntfParis, 0, 46.79999999999995, 0.99987742, 600000, 2200000);
223
        cs.setAbrev("EPSG:27572");
224
        data.put(cs.getAbrev(), cs);
225
        
226
        cs = new CSLambertCC(CSDatum.ntfParis, 0, 52, 0.99987742, 600000, 2200000);
227
        cs.setAbrev("EPSG:27582");
228
        data.put(cs.getAbrev(), cs);
229
        /*
230
         * # RGF93
231
         * <4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs  <>
232
         * # RGF93 / Lambert-93
233
         */
234
        cs = (new CSUTM(CSDatum.rgf93, 30)).toGeo();
235
        cs.setAbrev("EPSG:4171"); // NTF Paris
236
        data.put(cs.getAbrev(), cs);
237
        /*
238
         *  <2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3
239
         *  +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0
240
         *  +units=m +no_defs  <>
241
         */
242
        cs = new CSLambertCC(CSDatum.rgf93, 3.0, 46.5, 49.0, 44.0, 700000.0, 6600000.0);
243
        cs.setAbrev("EPSG:2154");
244
        data.put(cs.getAbrev(), cs);
245

    
246
        cs = new CSMercator(CSDatum.wgs84);
247
        cs.setAbrev("EPSG:54004");
248
        data.put(cs.getAbrev(), cs);
249
        cs.setAbrev("EPSG:9804");
250
        data.put(cs.getAbrev(), cs);
251
        
252
        // Lo que faltaba: ?planetas!
253
        cs = (new CSUTM(CSDatum.moon, 30)).toGeo();
254
        cs.setAbrev("IAU2000:30100"); // Moon
255
        data.put(cs.getAbrev(), cs);
256

    
257
        cs = (new CSUTM(CSDatum.mars, 30)).toGeo();
258
        cs.setAbrev("IAU2000:49900"); // Mars
259
        data.put(cs.getAbrev(), cs);
260
        
261
        /*
262
         * CRSs argentinos.
263
         * coordenadas geograficas
264
                        PosGAr 4172 
265
                        PosGAr98 4190
266
                        
267
                        coordenadas proyectadas
268
                        POSGAR 94/Argentina 1 22191 
269
                        POSGAR 94/Argentina 2 22192
270
                        POSGAR 94/Argentina 3 22193
271
                        POSGAR 94/Argentina 4 22194
272
                        POSGAR 94/Argentina 5 22195
273
                        POSGAR 94/Argentina 6 22196
274
                        POSGAR 94/Argentina 7 22197
275
                        
276
                        POSGAR 98/Argentina 1 22181
277
                        POSGAR 98/Argentina 2 22182
278
                        POSGAR 98/Argentina 3 22183
279
                        POSGAR 98/Argentina 4 22184
280
                        POSGAR 98/Argentina 5 22185
281
                        POSGAR 98/Argentina 6 22186
282
                        POSGAR 98/Argentina 7 22187
283
                        
284
                        4221 GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
285
                        
286
                        22191        EPSG        22191        PROJCS["Argentina_Zone_1",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",1500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-72],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m
287
                        22192        EPSG        22192        PROJCS["Argentina_Zone_2",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",2500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-69],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m
288
                        22193        EPSG        22193        PROJCS["Argentina_Zone_3",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",3500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-66],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m
289
                        22194        EPSG        22194        PROJCS["Argentina_Zone_4",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",4500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-63],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m
290
                        22195        EPSG        22195        PROJCS["Argentina_Zone_5",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",5500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-60],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m
291
                        22196        EPSG        22196        PROJCS["Argentina_Zone_6",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",6500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-57],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m
292
                        22197        EPSG        22197        PROJCS["Argentina_Zone_7",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",7500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-54],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]        +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m
293

294
         */
295
        cs = new CoordSys(CSDatum.posgar);
296
        cs.setAbrev("EPSG:4172"); // Posgar
297
        data.put(cs.getAbrev(), cs);
298
        
299
        cs = new CoordSys(
300
                        "GEOGCS[\"GCS_Campo_Inchauspe\"," +
301
                                "DATUM[\"D_Campo_Inchauspe\"," +
302
                                        "SPHEROID[\"International_1924\",6378388,297],"+
303
                                        "TOWGS84[0,0,0,0,0,0,0]]," +
304
                                "PRIMEM[\"Greenwich\",0]," +
305
                                "UNIT[\"Degree\",0.017453292519943295]]");
306
        cs.setAbrev("EPSG:4221"); // Campo Inchauspe
307
        data.put(cs.getAbrev(), cs);
308
        
309
       for (int i=1; i<=7; i++) {
310
                cs = new CoordSys(
311
                        "PROJCS[\"Argentina_Zone_"+i+"\"," +
312
                                "GEOGCS[\"GCS_Campo_Inchauspe\"," +
313
                                        "DATUM[\"D_Campo_Inchauspe\"," +
314
                                                "SPHEROID[\"International_1924\",6378388,297],"+
315
                                                "TOWGS84[0,0,0,0,0,0,0]]," +
316
                                        "PRIMEM[\"Greenwich\",0]," +
317
                                        "UNIT[\"Degree\",0.017453292519943295]]," +
318
                                "PROJECTION[\"Transverse_Mercator\"]," +
319
                                "PARAMETER[\"False_Easting\",1500000]," +
320
                                "PARAMETER[\"False_Northing\",0]," +
321
                                "PARAMETER[\"Central_Meridian\","+(-75+3*i)+"]," +
322
                                "PARAMETER[\"Scale_Factor\",1]," +
323
                                "PARAMETER[\"Latitude_Of_Origin\",-90]," +
324
                                "UNIT[\"Meter\",1]]");
325
                cs.setAbrev("EPSG:2219"+i); // Posgar
326
                data.put(cs.getAbrev(), cs);
327
        }
328
       
329
       /*
330
        * pendiente de a?adir:
331
        * 
332
        * EPSG 3003: Montemario / Italy Zone 1 - Pendiente de a?adir
333
              * EPSG 4149: CH1903 - Pendiente de a?adir
334
              * Ecuador:
335
              *   PSAD56, Geo, UTM 16/17S,16/17N
336
              */
337
    }
338

    
339
    /**
340
     * Mete una nueva proyeccion en la Pool.
341
     * @param name abreviatura de la proyecccion (i.e. EPSG:23030)
342
     * @param proj Proyeccion
343
     */
344
    public static void add(String name, IProjection proj) {
345
        data.put(name, proj);
346
    }
347

    
348
    /**
349
     * Devuelve una proyeccion a partir de una cadena.
350
     * @param name abreviatura de la proyecccion (i.e. EPSG:23030)
351
     * @return Proyeccion si existe
352
     */
353
    public IProjection get(String name) {
354
        IProjection proj = null;
355

    
356
        if (ProjectionPool.data.containsKey(name)) {
357
            proj = (IProjection) ProjectionPool.data.get(name);
358
        } else {
359
                // Consultation to remote EPSG database
360
                // if (right)
361
                //    buil new IProjection from GML
362
                // else
363
            System.err.println("ProjectionPool: Key '" + name + "' not set.");
364
        }
365

    
366
        return proj;
367
    }
368

    
369
    public static Iterator iterator() {
370
        ArrayList projs = new ArrayList();
371

    
372
        Iterator iter = data.entrySet().iterator();
373

    
374
        while (iter.hasNext()) {
375
            projs.add(((Map.Entry) iter.next()).getValue());
376
        }
377

    
378
        return projs.iterator();
379
    }
380

    
381
        public boolean doesRigurousTransformations() {
382
                return false;
383
        }
384
}