Statistics
| Revision:

root / branches / F2 / libraries / libJCRS / src / org / gvsig / crs / CrsGT.java @ 11398

History | View | Annotate | Download (6.83 KB)

1 11241 dguerrero
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 Instituto de Desarrollo Regional and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
34
 *   Campus Universitario s/n
35
 *   02071 Alabacete
36
 *   Spain
37
 *
38
 *   +34 967 599 200
39
 */
40
41
package org.gvsig.crs;
42
43
import java.awt.Color;
44
import java.awt.Graphics2D;
45
import java.awt.geom.Point2D;
46
import java.awt.geom.Rectangle2D;
47
48
import org.cresques.cts.ICoordTrans;
49
import org.cresques.cts.IDatum;
50
import org.cresques.cts.IProjection;
51
import org.cresques.geo.ViewPortData;
52 11398 dguerrero
import org.geotools.referencing.crs.AbstractDerivedCRS;
53
import org.geotools.referencing.crs.AbstractSingleCRS;
54
import org.geotools.referencing.datum.DefaultGeodeticDatum;
55 11304 dguerrero
import org.gvsig.crs.proj.CrsProj;
56
import org.gvsig.crs.proj.CrsProjException;
57
import org.gvsig.crs.proj.JNIBaseCrs;
58
import org.gvsig.crs.proj.OperationCrsException;
59 11241 dguerrero
import org.opengis.referencing.crs.CoordinateReferenceSystem;
60
61
/**
62
 * Clase que representa un CRS basado en GeoTools/GeoApi.
63
 *
64
 * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
65
 *
66
 */
67
public class CrsGT implements ICrs {
68 11304 dguerrero
        private static final Color basicGridColor = new Color(64, 64, 64, 128);
69 11241 dguerrero
70 11306 dguerrero
        /**
71
         * CRS GeoApi. Nucleo de la clare CrsGT.
72
         */
73 11304 dguerrero
        private CoordinateReferenceSystem         crsGT                        = null;
74 11306 dguerrero
75 11304 dguerrero
        private boolean                                         targetNad                 = false;
76 11306 dguerrero
        /**
77
         *Cadena proj4
78
         */
79 11304 dguerrero
        private String                                                 proj4                         = null;
80 11306 dguerrero
81 11304 dguerrero
        private Color                                                 gridColor                 = basicGridColor;
82 11306 dguerrero
83
        /**
84
         * Par?metro nadgrid para proj4.
85
         */
86 11304 dguerrero
        private String                                                 nad                                = null;
87 11241 dguerrero
88
        /**
89 11306 dguerrero
         * CRS operable con proj4.
90
         */
91
        private CrsProj                                         crsProj                        = null;
92
93
        /**
94
         * CRS Base operable con proj4.
95
         */
96
        private CrsProj                                         crsProjBase                = null;
97
98
        /**
99
         * Provisional, hasta que se elimine getCrsWkt de ICrs.
100
         */
101
        private CrsWkt                                                 crsWkt                        = null;
102
103
104
105
        /**
106 11241 dguerrero
         * Constructor a partir de un CoordinateReferenceSystem
107
         *
108
         * @param crsGT
109 11306 dguerrero
         * @throws CrsProjException
110 11241 dguerrero
         */
111 11306 dguerrero
        public CrsGT(CoordinateReferenceSystem crsGT){
112 11241 dguerrero
                this.crsGT = crsGT;
113 11306 dguerrero
                Proj4 proj4;
114
                try {
115
                        proj4 = new Proj4();
116
                        crsProj = new CrsProj(proj4.exportToProj4(crsGT));
117
                        if (crsGT instanceof AbstractDerivedCRS){
118
                                AbstractDerivedCRS derivedCRS = (AbstractDerivedCRS)crsGT;
119
                                crsProjBase = new CrsProj(proj4.exportToProj4(derivedCRS.getBaseCRS()));
120
                        }
121
                } catch (CrsException e) {
122
                        // TODO Auto-generated catch block
123
                        e.printStackTrace();
124
                }
125
126
                crsWkt = new CrsWkt(crsGT);
127 11241 dguerrero
        }
128
129
        public int getCode() {
130 11304 dguerrero
                return Integer.valueOf(getAbrev().split(":")[1]).intValue();
131 11241 dguerrero
        }
132
133
        public CrsWkt getCrsWkt() {
134 11306 dguerrero
                return crsWkt;
135 11241 dguerrero
        }
136
137
        public String getWKT() {
138 11306 dguerrero
                return crsGT.toWKT();
139 11241 dguerrero
        }
140
141
        public void setNadGrid(String nad) {
142 11304 dguerrero
                this.nad = nad;
143 11241 dguerrero
144
        }
145
146
        public void setNadInTarget(boolean targetNad) {
147
                // TODO Auto-generated method stub
148
149
        }
150
151
        public Point2D createPoint(double x, double y) {
152
                // TODO Auto-generated method stub
153
                return null;
154
        }
155
156
        public void drawGrid(Graphics2D g, ViewPortData vp) {
157
                // TODO Auto-generated method stub
158
159
        }
160
161
        public Point2D fromGeo(Point2D gPt, Point2D mPt) {
162
                // TODO Auto-generated method stub
163
                return null;
164
        }
165
166
        public String getAbrev() {
167 11277 dguerrero
                AbstractSingleCRS crs = (AbstractSingleCRS)crsGT;
168
                String authority = crs.getName().toString().split(":")[0];
169 11398 dguerrero
                //return ((AbstractSingleCRS)crsGT).getIdentifier(Citations.fromName(authority)).toString();
170
                return ((AbstractSingleCRS)crsGT).getIdentifiers().iterator().next().toString();
171 11241 dguerrero
        }
172
173
        public ICoordTrans getCT(IProjection dest) {
174 11304 dguerrero
                COperation operation = null;
175
                CrsGT crsDest = (CrsGT)dest;
176
                try {
177
                        operation = new COperation(this, (ICrs)dest);
178
                } catch (CrsException e) {
179
                        // TODO Auto-generated catch block
180
                        e.printStackTrace();
181
                }
182
183
                if (!getNadGrid().equals("")){
184
                        if (isTargetNad())
185
                                operation.setNadCrsProj(new CrsProj(crsDest.getProj4()+getNadGrid()), true);
186
                        else
187
                                operation.setNadCrsProj(new CrsProj(getProj4()+getNadGrid()), false);
188
                        return operation;
189
                }
190
191
                return operation;
192 11241 dguerrero
        }
193
194
        public IDatum getDatum() {
195 11277 dguerrero
                DefaultGeodeticDatum datumGT = (DefaultGeodeticDatum)((AbstractSingleCRS)crsGT).getDatum();
196
                CRSDatum datum = new CRSDatum(datumGT.getEllipsoid().getSemiMajorAxis(),datumGT.getEllipsoid().getInverseFlattening());
197
                return datum;
198 11241 dguerrero
        }
199
200
        public Rectangle2D getExtent(Rectangle2D extent, double scale,
201
                        double wImage, double hImage, double changeUnits, double dpi) {
202
                // TODO Auto-generated method stub
203
                return null;
204
        }
205
206
        public Color getGridColor() {
207 11304 dguerrero
                return gridColor;
208 11241 dguerrero
        }
209
210
        public double getScale(double minX, double maxX, double width, double dpi) {
211 11304 dguerrero
                double scale = 0D;
212
        if (!isProjected()) { // Es geogr?fico; calcula la escala.
213
            scale = ((maxX - minX) * // grados
214
215
            // 1852.0 metros x minuto de meridiano
216
            (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / // px / metro
217
                    width; // pixels
218
        }
219
        else{
220
                 scale = ((maxX - minX) * // metros
221
                    (dpi / 2.54 * 100.0)) / // px / metro
222
                    width; // pixels
223
        }
224
        return scale;
225 11241 dguerrero
        }
226
227
        public boolean isProjected() {
228
                if (crsGT instanceof AbstractDerivedCRS){
229
                        return true;
230
                }else
231
                        return false;
232
        }
233
234
        public void setGridColor(Color c) {
235 11304 dguerrero
                gridColor = c;
236 11241 dguerrero
        }
237
238
        public Point2D toGeo(Point2D pt) {
239 11304 dguerrero
                if (isProjected()){
240
                        double x[] = {pt.getX()};
241
                        double y[] = {pt.getY()};
242
                        double z[] = {0D};
243
                        try {
244
                                JNIBaseCrs.operate( x , y, z,
245 11306 dguerrero
                                                crsProj,crsProjBase);
246 11304 dguerrero
                        } catch (OperationCrsException e) {
247
                                // TODO Auto-generated catch block
248
                                e.printStackTrace();
249
                        } catch (CrsProjException e) {
250
                                // TODO Auto-generated catch block
251
                                e.printStackTrace();
252
                        }
253
                        return new Point2D.Double(x[0],y[0]);
254
                }
255
                else
256
                        return pt;
257 11241 dguerrero
        }
258
259 11304 dguerrero
        public String getNadGrid() {
260
                return nad;
261
        }
262
263
        /**
264
         * @return
265
         */
266
        public boolean isTargetNad() {
267
                return targetNad;
268
        }
269
270
        /**
271
         *
272
         * @return
273
         */
274
        public String getProj4() {
275
                return proj4;
276
        }
277
278
        public CoordinateReferenceSystem getCrsGT() {
279
                return crsGT;
280
        }
281
282 11241 dguerrero
}