Revision 46045

View differences:

tags/org.gvsig.desktop-2.0.342/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/CresquesCtsLibrary.java
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;
25

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

  
29
import org.gvsig.fmap.crs.CRSFactory;
30
import org.gvsig.tools.library.AbstractLibrary;
31
import org.gvsig.tools.library.LibraryException;
32

  
33
public class CresquesCtsLibrary extends AbstractLibrary {
34

  
35
    public void doRegistration() {
36
        registerAsImplementationOf(ProjectionLibrary.class,1);
37
    }
38

  
39
    protected void doInitialize() throws LibraryException {
40
        CRSFactory.registerCRSFactory( new ProjectionPool());
41
    }
42

  
43
    protected void doPostInitialize() throws LibraryException {
44
        // Nothing to do
45
    }
46
}
0 47

  
tags/org.gvsig.desktop-2.0.342/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/wkt/WKT.java
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.wkt;
25

  
26
import java.util.ArrayList;
27

  
28
/**
29
 * Generates a WKT from CRS parameters.
30
 * as, for example in
31
 * "GEOGCS[\"ETRS89\","+
32
        "DATUM[\"European_Terrestrial_Reference_System_1989\","+
33
            "SPHEROID[\"GRS 1980\",6378137,298.257222101,"+
34
                "AUTHORITY[\"EPSG\",\"7019\"]],"+
35
            "AUTHORITY[\"EPSG\",\"6258\"]," +
36
            "TOWGS84[0,0,0,0,0,0,0]],"+
37
        "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],"+
38
        "UNIT[\"degree\",0.01745329251994328, AUTHORITY[\"EPSG\",\"9122\"]],"+
39
        "AUTHORITY[\"EPSG\",\"4258\"]]";
40
    
41
 * @author Luis W. Sevilla <sevilla_lui@gva.es>
42
 *
43
 */
44
public abstract class WKT {
45

  
46
	static class Authority {
47
		String name;
48
		String code;
49
		public Authority(String n, String c) {
50
			name = n;
51
			code = c;
52
		}
53
		public String toWKT() {
54
			return "AUTHORITY[\""+name+"\",\""+code+"\"]";
55
		}
56
	}
57

  
58
	static class Parameter {
59
		protected String name;
60
		private String value;
61
		protected Authority authority; // optional
62
		
63
		public Parameter(String n) {
64
			name = n;
65
		}
66
		
67
		public Parameter(String n, String v) {
68
			name = n;
69
			value = v;
70
		}
71
		public Parameter(String n, Authority a) {
72
			name = n;
73
			authority = a;
74
		}
75
		
76
		public String toWKT() {
77
			String txt = "PARAMETER[\""+name+"\","+value;
78
			if (authority != null)
79
				txt += ","+authority.toWKT();
80
			return txt + "]";
81
		}
82
	}
83

  
84
	static class Spheroid {
85
		String name;
86
		double semiMajor;
87
		double inverseFlattening;
88
		Authority authority = null; // optional
89
		
90
		public Spheroid(String n, double s, double f) {
91
			name = n;
92
			semiMajor = s;
93
			inverseFlattening = f;
94
		}
95
		public Spheroid(String n, double s, double f, Authority a) {
96
			name = n;
97
			semiMajor = s;
98
			inverseFlattening = f;
99
			authority = a;
100
		}
101
		public String toWKT() {
102
			String txt = "SPHEROID[\""+name+"\","+
103
				semiMajor+","+inverseFlattening;
104
			if (authority != null)
105
				txt += ","+authority.toWKT();
106
			return txt + "]";
107
		}
108
	}
109

  
110
	static class ToWGS84 {
111
		double dx = 0;
112
		double dy = 0;
113
		double dz = 0;
114
		double ex = 0;
115
		double ey = 0;
116
		double ez = 0;
117
		double ppm = 0;
118
		public ToWGS84() {
119
		}
120
		public ToWGS84(double dx, double dy, double dz, double ex, double ey, double ez, double ppm) {
121
			this.dx = dx;
122
			this.dy = dy;
123
			this.dz = dz;
124
			this.ex = ex;
125
			this.ey = ey;
126
			this.ez = ez;
127
			this.ppm = ppm;
128
		}
129
		public String toWKT() {
130
			return "TOWGS84["+dx+","+dy+","+dz+","+ex+","+ey+","+ez+","+ppm+"]";
131
		}
132
	}
133

  
134
	static class Datum {
135
		String name;
136
		Spheroid spheroid;
137
		ToWGS84 towgs84 = new ToWGS84(); // optional
138
		Authority authority; // optional
139
		public Datum(String n, Spheroid s) {
140
			init (n, s, new ToWGS84(), null);
141
		}
142
		public Datum(String n, Spheroid s, ToWGS84 t) {
143
			init (n, s, t, null);
144
		}
145
		public Datum(String n, Spheroid s, Authority a) {
146
			init (n, s, new ToWGS84(), a);
147
		}
148
		public Datum(String n, Spheroid s, ToWGS84 t, Authority a) {
149
			init (n, s, t, a);
150
		}
151
		private void init(String n, Spheroid s,
152
			ToWGS84 t, Authority a) {
153
			name = n;
154
			spheroid = s;
155
			towgs84 = t;
156
			authority = a;
157
		}
158
		public String toWKT() {
159
			String txt = "DATUM[\""+name+"\","+spheroid.toWKT();
160
			if (towgs84 != null)
161
				txt += ","+towgs84.toWKT();
162
			if (authority != null)
163
				txt += ","+authority.toWKT();
164
			return txt+"]";
165
		}
166
	}
167

  
168
	static class PrimeM {
169
		String name;
170
		double longitude;
171
		Authority authority = null; // optional
172
		
173
		public PrimeM(String n, double l) {
174
			name = n;
175
			longitude = l;
176
		}
177
		
178
		public PrimeM(String n, double l, Authority a) {
179
			name = n;
180
			longitude = l;
181
			authority = a;
182
		}
183
		
184
		public String toWKT() {
185
			String txt = "PRIMEM[\""+name+"\","+longitude;
186
			if (authority != null)
187
				txt += ","+authority.toWKT();
188
			return txt + "]";
189
		}
190
	}
191

  
192
	static class Unit {
193
		String name;
194
		double conversionFactor;
195
		Authority authority; // optional
196
		
197
		public Unit(String n, double l) {
198
			name = n;
199
			conversionFactor = l;
200
		}
201
		
202
		public Unit(String n, double l, Authority a) {
203
			name = n;
204
			conversionFactor = l;
205
			authority = a;
206
		}
207
		
208
		public String toWKT() {
209
			String txt = "UNIT[\""+name+"\","+conversionFactor;
210
			if (authority != null)
211
				txt += ","+authority.toWKT();
212
			return txt + "]";
213
		}
214
	}
215
	
216
	static class Orientation {
217
		public final static int NORTH = 0;
218
		public final static int SOUTH = 1;
219
		public final static int EAST = 2;
220
		public final static int WEST = 3;
221
		public final static int UP = 4;
222
		public final static int DOWN = 5;
223
		public final static int OTHER = 6;
224
		protected final String [] txt = {
225
			"NORTH","SOUTH","EAST","WEST","UP","DOWN","OTHER"
226
		};
227
		protected int to = -1;
228
		
229
		public Orientation(int to) {
230
			this.to = to;
231
		}
232
	}
233
	
234
	static class Axis extends Orientation {
235
		String name;
236
		
237
		public Axis(String name, int to) {
238
			super(to);
239
			this.name = name;
240
		}
241
		
242
		public String toWKT() {
243
			return "AXIS[\""+name+"\","+txt[to]+ "]";
244
		}
245
	}
246
	
247
	static class TwinAxes {
248
		Axis axe1;
249
		Axis axe2;
250
		
251
		public TwinAxes(Axis a1, Axis a2) {
252
			axe1 = a1;
253
			axe2 = a2;
254
		}
255

  
256
		public String toWKT() {
257
			return axe1.toWKT()+","+axe2.toWKT();
258
		}
259

  
260
	}
261

  
262
	static class GeogCS extends WKT {
263
		String name;
264
		Datum datum;
265
		PrimeM primeMeridian;
266
		Unit unit;
267
		TwinAxes axes = null; // optional
268
		Authority authority = null; // optional
269
		
270
		public GeogCS(String n, Datum d, PrimeM p, Unit u) {
271
			init(n, d, p, u, null, null);
272
		}
273
		
274
		public GeogCS(String n, Datum d, PrimeM p, Unit u,
275
				Authority a) {
276
			init(n, d, p, u, null, a);
277
		}
278
		
279
		public GeogCS(String n, Datum d, PrimeM p, Unit u,
280
				TwinAxes t) {
281
			init(n, d, p, u, t, null);
282
		}
283
		
284
		public GeogCS(String n, Datum d, PrimeM p, Unit u,
285
				TwinAxes t, Authority a) {
286
			init(n, d, p, u, t, a);
287
		}
288
		
289
		private void init(String n, Datum d, PrimeM p, Unit u,
290
			TwinAxes t, Authority a) {
291
			name = n;
292
			datum = d;
293
			primeMeridian = p;
294
			unit = u;
295
			axes = t;
296
			authority = a;
297
		}
298
		
299
		public String toWKT() {
300
			String txt = "GEOGCS[\""+name+"\","+datum.toWKT()+
301
				","+primeMeridian.toWKT()+","+unit.toWKT();
302
			if (axes != null)
303
				txt += ","+axes.toWKT();
304
			if (authority != null)
305
				txt += ","+authority.toWKT();
306
			return txt+"]";
307
		}
308
	}
309

  
310
	static class Projection extends Parameter {
311
		public Projection(String n) {
312
			super(n);
313
		}
314
		
315
		public Projection(String n, Authority a) {
316
			super(n,a);
317
		}
318
		
319
		public String toWKT() {
320
			String txt = "PROJECTION[\""+name+"\"";
321
			if (authority != null)
322
				txt += ","+authority.toWKT();
323
			return txt + "]";
324
		}
325
	}
326

  
327
	static class ProjCS extends Parameter {
328
		GeogCS geogcs;
329
		Projection proj;
330
		ArrayList params = new ArrayList();
331
		Unit unit;
332
		TwinAxes axes = null; // optional
333

  
334
		public ProjCS(String n, GeogCS cs, Projection prj, Unit u ) {
335
			super(n);
336
			Parameter [] p = {};
337
			init(n, cs, prj, p, u, null);
338
		}
339
		
340
		public ProjCS(String n, GeogCS cs, Projection prj,
341
				Parameter [] p, Unit u ) {
342
			super(n);
343
			init(n, cs, prj, p, u, null);
344
		}
345
		
346
		public ProjCS(String n, GeogCS cs, Projection prj,
347
				Unit u, TwinAxes t, Authority a ) {
348
			super(n, a);
349
			Parameter [] p = {};
350
			init(n, cs, prj, p, u, t);
351
		}
352
		
353
		public ProjCS(String n, GeogCS cs, Projection prj,
354
				Parameter [] p, Unit u, TwinAxes t, Authority a ) {
355
			super(n, a);
356
			init(n, cs, prj, p, u, t);
357
		}
358
		
359
		private void init(String n, GeogCS cs, Projection prj,
360
			Parameter [] p, Unit u, TwinAxes t) {
361
			geogcs = cs;
362
			proj = prj;
363
			for (int i=0; i<p.length; i++)
364
				params.add(p[i]);
365
			unit = u;
366
			axes = t;
367
		}
368

  
369
		public void add(Parameter p) {
370
			params.add(p);
371
		}
372
		
373
		public String toWKT() {
374
			String txt = "PROJCS[\""+name+"\","+geogcs.toWKT()+
375
				","+proj.toWKT();
376
			for (int i=0; i<params.size();i++)
377
				txt += ","+((Parameter)params.get(i)).toWKT();
378
			txt += ","+unit.toWKT();
379
			if (axes != null)
380
				txt += ","+axes.toWKT();
381
			if (authority != null)
382
				txt += ","+authority.toWKT();
383
			return txt+"]";
384
		}
385
	}
386

  
387
	abstract public String toWKT();
388
}
0 389

  
tags/org.gvsig.desktop-2.0.342/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
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

  
385
    /* (non-Javadoc)
386
     * @see org.cresques.cts.ICRSFactory#get(java.lang.String, java.lang.String)
387
     */
388
    @Override
389
    public IProjection get(String format, String value) {
390
        // TODO Auto-generated method stub
391
        return null;
392
    }
393
}
0 394

  
tags/org.gvsig.desktop-2.0.342/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSUTM.java
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.gt2;
25

  
26
import org.cresques.cts.UTM;
27
import org.geotools.cs.AxisInfo;
28
import org.geotools.cs.Projection;
29
import org.geotools.units.Unit;
30
import org.gvsig.fmap.crs.CRSFactory;
31
import org.opengis.referencing.FactoryException;
32

  
33

  
34
/**
35
 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
36
 */
37
public class CSUTM extends CoordSys implements UTM {
38
    public CSUTM(CSDatum datum, int zone) {
39
        super(datum);
40
        init(datum, zone, "N");
41
    }
42
    
43
    public CSUTM(CSDatum datum, int zone, String ns) {
44
        super(datum);
45
        init(datum, zone, ns);
46
    }
47
 
48
    public void init(CSDatum datum, int zone, String ns) {
49
        Unit linearUnit = Unit.METRE;
50

  
51
        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Transverse_Mercator");
52
        params.setParameter("semi_major",
53
                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
54
        params.setParameter("semi_minor",
55
                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
56
        params.setParameter("central_meridian", (double) ((zone * 6) - 183));
57
        params.setParameter("latitude_of_origin", 0.0);
58
        params.setParameter("scale_factor", 0.9996);
59
        params.setParameter("false_easting", 500000.0);
60
        if (ns.toUpperCase().compareTo("S") == 0)
61
        	params.setParameter("false_northing", 10000000.0);
62
        else
63
        	params.setParameter("false_northing", 0.0);
64

  
65
        try {
66
            Projection projection = csFactory.createProjection("UTM" + zone,
67
                                                               "Transverse_Mercator",
68
                                                               params);
69
            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
70
                                                                         .toString(),
71
                                                               geogCS,
72
                                                               projection,
73
                                                               linearUnit,
74
                                                               AxisInfo.X,
75
                                                               AxisInfo.Y);
76
        } catch (FactoryException e) {
77
            // TODO Bloque catch generado autom?ticamente
78
            e.printStackTrace();
79
        }
80
    }
81

  
82
    public double getScale(double minX, double maxX, double w, double dpi) {
83
        double scale = super.getScale(minX, maxX, w, dpi);
84

  
85
        if (projCS != null) { // Es geogr?fico; calcula la escala.
86
            scale = ((maxX - minX) * // metros
87
                    (dpi / 2.54 * 100.0)) / // px / metro
88
                    w; // pixels
89
        }
90

  
91
        return scale;
92
    }
93

  
94
    public String toString() {
95
        return projCS.toString();
96
    }
97
    
98
    public Object clone() throws CloneNotSupportedException {
99
        return CRSFactory.getCRS( this.getFullCode() );
100
     }
101

  
102
}
0 103

  
tags/org.gvsig.desktop-2.0.342/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSGaussPt.java
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.gt2;
25

  
26
import org.geotools.cs.AxisInfo;
27
import org.geotools.cs.GeographicCoordinateSystem;
28
import org.geotools.cs.Projection;
29

  
30
import org.geotools.measure.Angle;
31

  
32
import org.geotools.units.Unit;
33

  
34
import org.opengis.referencing.FactoryException;
35

  
36

  
37
/**
38
 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
39
 *
40
 */
41
public class CSGaussPt extends CoordSys {
42
    public static CSGaussPt hgd73 = new CSGaussPt(CSDatum.d73);
43

  
44
    public CSGaussPt(CSDatum datum) {
45
        super(datum);
46
        geogCS = new GeographicCoordinateSystem(datum.getName(null),
47
                                                datum.getDatum());
48

  
49
        Unit linearUnit = Unit.METRE;
50

  
51
        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Oblique_Stereographic");
52
        params.setParameter("semi_major",
53
                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
54
        params.setParameter("semi_minor",
55
                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
56
        params.setParameter("central_meridian",
57
                            (new Angle("8?07'54.862\"W")).degrees());
58

  
59
        //params.setParameter("longitude_of_origin", (new Angle("8?07'54.862\"")).degrees());
60
        params.setParameter("latitude_of_origin",
61
                            (new Angle("39?40'N")).degrees());
62
        params.setParameter("scale_factor", 1.0);
63
        params.setParameter("false_easting", 0D); //180598D);
64
        params.setParameter("false_northing", 0D); //-86990D);
65

  
66
        try {
67
            Projection projection = csFactory.createProjection("GAUSS",
68
                                                               "Oblique_Stereographic",
69
                                                               params);
70
            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
71
                                                                         .toString(),
72
                                                               geogCS,
73
                                                               projection,
74
                                                               linearUnit,
75
                                                               AxisInfo.X,
76
                                                               AxisInfo.Y);
77
        } catch (FactoryException e) {
78
            // TODO Bloque catch generado autom?ticamente
79
            e.printStackTrace();
80
        }
81
    }
82

  
83
    public String toString() {
84
        return projCS.toString();
85
    }
86
}
0 87

  
tags/org.gvsig.desktop-2.0.342/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordTrans.java
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.gt2;
25

  
26
import java.awt.geom.Point2D;
27
import java.awt.geom.Rectangle2D;
28

  
29
import org.cresques.cts.ICoordTrans;
30
import org.cresques.cts.IProjection;
31
import org.geotools.ct.CannotCreateTransformException;
32
import org.geotools.ct.CoordinateTransformation;
33
import org.geotools.ct.CoordinateTransformationFactory;
34
import org.geotools.ct.MathTransform;
35
import org.geotools.pt.CoordinatePoint;
36
import org.opengis.referencing.operation.TransformException;
37

  
38

  
39
//import org.geotools.pt.MismatchedDimensionException;
40

  
41
/**
42
 * Transforma coordenadas entre dos sistemas
43
 * @see org.creques.cts.CoordSys
44
 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
45
 */
46
class CoordTrans implements ICoordTrans {
47
    private CoordinateTransformationFactory trFactory = CoordinateTransformationFactory.getDefault();
48
    private CoordinateTransformation tr = null;
49
    private MathTransform mt = null;
50
    private MathTransform mt2 = null;
51
    private MathTransform mt3 = null;
52
    private MathTransform mtDatum = null;
53
    private CoordSys from = null;
54
    private CoordSys to = null;
55
    
56
    private ICoordTrans invertedCT = null;
57

  
58
    public CoordTrans(CoordSys from, CoordSys to) {
59
        this.from = from;
60
        this.to = to;
61

  
62
        // Si los dos CoordSys son proyectados, entonces hay
63
        // que hacer dos transformaciones (pasar por geogr?ficas)
64
        // Si hay cambio de datum son 3 las transformaciones
65
        try {
66
            if (from.getDatum() != to.getDatum()) {
67
                tr = trFactory.createFromCoordinateSystems(from.toGeo().getCS(),
68
                                                           to.toGeo().getCS());
69
                mtDatum = tr.getMathTransform();
70
            }
71

  
72
            if ((from.projCS != null) && (to.projCS != null)) {
73
                CoordSys geogcs = from.toGeo();
74
                tr = trFactory.createFromCoordinateSystems(from.getCS(),
75
                                                           geogcs.getCS());
76
                mt = tr.getMathTransform();
77

  
78
                if (mtDatum != null) {
79
                    mt2 = mtDatum;
80
                }
81

  
82
                geogcs = to.toGeo();
83
                tr = trFactory.createFromCoordinateSystems(geogcs.getCS(),
84
                                                           to.getCS());
85

  
86
                if (mt2 == null) {
87
                    mt2 = tr.getMathTransform();
88
                } else {
89
                    mt3 = tr.getMathTransform();
90
                }
91
            } else {
92
                if (from.projCS == null) {
93
                    mt = mtDatum;
94
                }
95

  
96
                tr = trFactory.createFromCoordinateSystems(from.getCS(),
97
                                                           to.getCS());
98

  
99
                if (mt == null) {
100
                    mt = tr.getMathTransform();
101

  
102
                    if (mtDatum != null) {
103
                        mt2 = mtDatum;
104
                    }
105
                } else {
106
                    mt2 = tr.getMathTransform();
107
                }
108
            }
109
        } catch (CannotCreateTransformException e) {
110
            // TODO Bloque catch generado autom?ticamente
111
            e.printStackTrace();
112
        }
113
    }
114

  
115
    public IProjection getPOrig() {
116
        return from;
117
    }
118

  
119
    public IProjection getPDest() {
120
        return to;
121
    }
122

  
123
    public ICoordTrans getInverted() {
124
        if (invertedCT == null)
125
            invertedCT = new CoordTrans(to, from);
126
        return invertedCT;
127
    }
128

  
129
    public Point2D convert(Point2D ptOrig, Point2D ptDest) {
130
        CoordinatePoint pt1 = new CoordinatePoint(ptOrig);
131
        CoordinatePoint pt2 = new CoordinatePoint(0D, 0D);
132
        ptDest = null;
133

  
134
        try {
135
            mt.transform(pt1, pt2);
136
            ptDest = pt2.toPoint2D();
137

  
138
            if (mt2 != null) {
139
                mt2.transform(pt2, pt1);
140
                ptDest = pt1.toPoint2D();
141

  
142
                if (mt3 != null) {
143
                    mt3.transform(pt1, pt2);
144
                    ptDest = pt2.toPoint2D();
145
                }
146
            }
147

  
148
            /*} catch (MismatchedDimensionException e) {
149
                    // TODO Bloque catch generado autom?ticamente
150
                    e.printStackTrace();
151
            */
152
        } catch (TransformException e) {
153
            // TODO Bloque catch generado autom?ticamente
154
            e.printStackTrace();
155
        }
156

  
157
        return ptDest;
158
    }
159

  
160
    public String toString() {
161
        return tr.toString();
162
    }
163

  
164
    /* (non-Javadoc)
165
     * @see org.cresques.cts.ICoordTrans#convert(java.awt.geom.Rectangle2D)
166
     */
167
    public Rectangle2D convert(Rectangle2D rect) {
168
        
169
        Point2D pt1 = new Point2D.Double(rect.getMinX(), rect.getMinY());
170
        Point2D pt2 = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
171
        Point2D pt3 = new Point2D.Double(rect.getMinX(), rect.getMaxY());
172
        Point2D pt4 = new Point2D.Double(rect.getMaxX(), rect.getMinY());
173
        
174
        convert(pt1, pt1);
175
        convert(pt2, pt2);
176
        convert(pt3, pt3);
177
        convert(pt4, pt4);
178

  
179
        double min_x = Math.min(
180
            Math.min(pt1.getX(), pt2.getX()),
181
            Math.min(pt3.getX(), pt4.getX()));
182
        double min_y = Math.min(
183
            Math.min(pt1.getY(), pt2.getY()),
184
            Math.min(pt3.getY(), pt4.getY()));
185
        double max_x = Math.max(
186
            Math.max(pt1.getX(), pt2.getX()),
187
            Math.max(pt3.getX(), pt4.getX()));
188
        double max_y = Math.max(
189
            Math.max(pt1.getY(), pt2.getY()),
190
            Math.max(pt3.getY(), pt4.getY()));
191
        
192
        return new Rectangle2D.Double(
193
            min_x, min_y, max_x - min_x, max_y - min_y);
194
        
195
    }
196
}
0 197

  
tags/org.gvsig.desktop-2.0.342/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSDatum.java
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.gt2;
25

  
26
import java.util.Locale;
27

  
28
import org.cresques.cts.IDatum;
29
import org.geotools.cs.CoordinateSystemFactory;
30
import org.geotools.cs.GeographicCoordinateSystem;
31
import org.geotools.cs.HorizontalDatum;
32
import org.opengis.referencing.FactoryException;
33

  
34

  
35
/**
36
 * Datum (y Ellipsoid) de GeoTools2.
37
 *
38
 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
39
 */
40
public class CSDatum implements IDatum {
41
    private static String line1 = "DATUM[\"WGS_1984\"," +
42
                                  "SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]," +
43
                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]]";
44
    private static String line2 = "DATUM[\"European_Datum_1950\"," +
45
                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
46
                                  "TOWGS84[-84,-107,-120,0,0,0,0],AUTHORITY[\"EPSG\",\"6230\"]]";
47
    private static String line3 = "DATUM[\"Nouvelle_Triangulation_Francaise\"," +
48
                                  "SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627, AUTHORITY[\"EPSG\",\"7011\"]]," +
49
                                  "TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6275\"]]";
50
    private static String line4 = "DATUM[\"Datum 73\"," +
51
                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
52
                                  "TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY[\"EPSG\",\"4274\"]]";
53
    private static String line5 = "DATUM[\"North_American_Datum_1927\"," +
54
                                  "SPHEROID[\"Clarke 1866\",6378206.4,294.978698213901,AUTHORITY[\"EPSG\",\"7008\"]]," +
55
                                  "TOWGS84[-3,142,183,0,0,0,0],AUTHORITY[\"EPSG\",\"6267\"]]";
56
    private static String line6 = "DATUM[\"North_American_Datum_1983\"," +
57
                                  "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
58
                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]]";
59

  
60
    /*
61
     * INSERT INTO epsg_coordinatereferencesystem VALUES (
62
     * 4288, 'Loma Quintana', 1313, 'geographic 2D', 6422, 6288,
63
     * Null, Null, Null, Null, 'Geodetic survey.',
64
     * 'Superseded by La Canoa (code 4247).', '',
65
     * 'EPSG', '2004/01/06', '2003.37', 1, 0 );
66
     *
67
     *  DX (m) = -270.933
68
            DY (m) =  115.599
69
            DZ (m) = -360.226
70

  
71
            EX (") = -5.266
72
            EY (") = -1.238
73
              EZ (")  =  2.381
74
            FE (ppm) = -5.109
75
     */
76
    private static String line7 = "DATUM[\"Loma Quintana\"," +
77
                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
78
                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6288\"]]";
79

  
80
    /*
81
    # La Canoa
82
    <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0
83
    no_defs <>
84
    # PSAD56
85
    <4248> +proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 no_defs <>
86
     */
87
    private static String line8 = "DATUM[\"La Canoa\"," +
88
                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
89
                                  "TOWGS84[-270.933,115.599,-360.226,-5.266,-1.238,2.381,-5.109],AUTHORITY[\"EPSG\",\"6288\"]]";
90
    private static String line9 = "GEOGCS[\"NTF (Paris)\","+
91
    	"DATUM[\"Nouvelle_Triangulation_Francaise_Paris\"," +
92
    	"SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936269,AUTHORITY[\"EPSG\",\"7011\"]]," +
93
    	"TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"8903\"]]"+
94
        ",PRIMEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]]," +
95
        "UNIT[\"grad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]]," +
96
        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
97
        "AUTHORITY[\"EPSG\",\"4807\"]]";
98
    
99
    private static String line10 = "GEOGCS[\"RGF93\"," +
100
		"DATUM[\"Reseau Geodesique Francais 1993\"," +
101
	    "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
102
	    "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],"+
103
        "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
104
        "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
105
        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
106
        "AUTHORITY[\"EPSG\",\"4171\"]]";
107
    private static String line11 = "GEOGCS[\"ETRS89\","+
108
        "DATUM[\"European_Terrestrial_Reference_System_1989\","+
109
            "SPHEROID[\"GRS 1980\",6378137,298.257222101,"+
110
                "AUTHORITY[\"EPSG\",\"7019\"]],"+
111
            "AUTHORITY[\"EPSG\",\"6258\"]],"+
112
        "PRIMEM[\"Greenwich\",0,"+
113
            "AUTHORITY[\"EPSG\",\"8901\"]],"+
114
        "UNIT[\"degree\",0.01745329251994328,"+
115
            "AUTHORITY[\"EPSG\",\"9122\"]],"+
116
        "AUTHORITY[\"EPSG\",\"4258\"]]";
117
    //," +
118
    //"TOWGS84[0,0,0,0,0,0,0]
119
    private static String line12 =
120
    	"GEOGCS[\"Mars 2000\","+
121
	    	"DATUM[\"D_Mars_2000\","+
122
	    		"SPHEROID[\"Mars_2000_IAU_IAG\",3396190.0, 169.89444722361179],"+
123
	    	"TOWGS84[0,0,0,0,0,0,0]],"+
124
		    "PRIMEM[\"Greenwich\",0],"+
125
	    	"UNIT[\"Decimal_Degree\",0.0174532925199433]]";
126

  
127
    public final static CSDatum wgs84 = new CSDatum(line1);
128
    public final static CSDatum ed50 = new CSDatum(line2);
129
    public final static CSDatum ntf = new CSDatum(line3);
130
    public final static CSDatum d73 = new CSDatum(line4);
131
    public final static CSDatum nad27 = new CSDatum(line5);
132
    public final static CSDatum nad83 = new CSDatum(line6);
133
    public final static CSDatum lomaQuintana = new CSDatum(line7);
134
    public final static CSDatum laCanoa = new CSDatum(line8);
135
    public static CSDatum etrs89 = null;
136
    public static CSDatum ntfParis = null;
137
    public static CSDatum posgar = null;
138
    public static CSDatum rgf93 = null;
139
    public static CSDatum mars = null;
140
    public static CSDatum moon = null;
141
    private String sGeo1 = "GEOGCS[\"WGS 84\",";
142
    private String sGeo2 =
143
        ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
144
        "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
145
        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
146
        "AUTHORITY[\"EPSG\",\"4326\"]]";
147
    private HorizontalDatum datum = null;
148
    static {
149
    	try {
150
			ntfParis =  new CSDatum().fromWKT(line9);
151
			rgf93 =  new CSDatum().fromWKT(line10);
152
			etrs89 = new CSDatum().fromWKT(line11);
153
			posgar = new CSDatum().fromWKT(
154
				"GEOGCS[\"POSGAR\","+
155
				"DATUM[\"POSGAR\"," +
156
                "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
157
                "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]]"+
158
                ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
159
                "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
160
                "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
161
                "AUTHORITY[\"EPSG\",\"4172\"]]");
162
			mars = new CSDatum().fromWKT(line12);
163
			moon = new CSDatum().fromWKT(
164
				"GEOGCS[\"Moon 2000\"," +
165
				"DATUM[\"D_Moon_2000\"," +
166
				"SPHEROID[\"Moon_2000_IAU_IAG\",1737400.0, 0.0]," +
167
		    	"TOWGS84[0,0,0,0,0,0,0]],"+
168
				"PRIMEM[\"Greenwich\",0]," +
169
				"UNIT[\"Decimal_Degree\",0.0174532925199433]]");
170
		} catch (FactoryException e) {
171
			// TODO Auto-generated catch block
172
			e.printStackTrace();
173
		}
174
    }
175

  
176
    public CSDatum() {
177
    }
178

  
179
    public CSDatum(HorizontalDatum datum) {
180
    	this.datum = datum;
181
    }
182

  
183
    public CSDatum(String sDatum) {
184
        try {
185
            fromWKT(sGeo1 + sDatum + sGeo2);
186
        } catch (FactoryException e) {
187
            // TODO Bloque catch generado autom?ticamente
188
            e.printStackTrace();
189
        }
190
    }
191
    
192
    public CSDatum fromWKT(String s) throws FactoryException {
193
        datum = ((GeographicCoordinateSystem) CoordinateSystemFactory.getDefault()
194
                .createFromWKT(s)).getHorizontalDatum();
195
        return this;
196
    }
197

  
198
    public String getName(Locale loc) {
199
        return datum.getName().toString();
200
    }
201

  
202
    HorizontalDatum getDatum() {
203
        return datum;
204
    }
205

  
206
    public double getESemiMajorAxis() {
207
        return datum.getEllipsoid().getSemiMajorAxis();
208
    }
209

  
210
    public double getEIFlattening() {
211
        return datum.getEllipsoid().getInverseFlattening();
212
    }
213

  
214
    public String toString() {
215
        return datum.toString();
216
    }
217
}
0 218

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff