root / org.gvsig.sis.proj / trunk / org.gvsig.sis.proj / org.gvsig.sis.proj.catalog.impl / src / main / java / org / gvsig / sis / proj / catalog / SisCRSCatalogManager.java @ 818
History | View | Annotate | Download (7.85 KB)
1 | 813 | cmartinez | package org.gvsig.sis.proj.catalog; |
---|---|---|---|
2 | |||
3 | import java.io.File; |
||
4 | import java.util.ArrayList; |
||
5 | import java.util.Iterator; |
||
6 | import java.util.List; |
||
7 | import java.util.ServiceLoader; |
||
8 | import java.util.Set; |
||
9 | |||
10 | import org.apache.sis.referencing.CRS; |
||
11 | import org.gvsig.proj.catalog.CRSCatalogManager; |
||
12 | import org.gvsig.proj.catalog.CRSDefinition; |
||
13 | import org.gvsig.proj.catalog.TransformationDefinition; |
||
14 | import org.gvsig.proj.catalog.exception.CRSCatalogException; |
||
15 | import org.gvsig.proj.catalog.exception.CoordinateReferenceSystemNotFoundException; |
||
16 | import org.gvsig.proj.catalog.exception.IncompatibleDefinitionException; |
||
17 | import org.opengis.referencing.NoSuchAuthorityCodeException; |
||
18 | import org.opengis.referencing.crs.CRSAuthorityFactory; |
||
19 | import org.opengis.referencing.crs.CoordinateReferenceSystem; |
||
20 | import org.opengis.referencing.operation.CoordinateOperation; |
||
21 | import org.opengis.util.FactoryException; |
||
22 | |||
23 | public class SisCRSCatalogManager implements CRSCatalogManager { |
||
24 | |||
25 | public SisCRSCatalogManager() {
|
||
26 | } |
||
27 | |||
28 | @Override
|
||
29 | public List<String> getAuthorityNames() { |
||
30 | ArrayList<String> authNames = new ArrayList<String>(); |
||
31 | ServiceLoader<CRSAuthorityFactory> loader = (ServiceLoader<CRSAuthorityFactory>) ServiceLoader.load(CRSAuthorityFactory.class); |
||
32 | Iterator<CRSAuthorityFactory> iterator = loader.iterator();
|
||
33 | CRSAuthorityFactory factory; |
||
34 | while (iterator.hasNext()) {
|
||
35 | factory = iterator.next(); |
||
36 | authNames.add(factory.getAuthority().getTitle().toString()); |
||
37 | } |
||
38 | return authNames;
|
||
39 | } |
||
40 | |||
41 | @Override
|
||
42 | public List<String> getCodes() { |
||
43 | ArrayList<String> codes = new ArrayList<String>(); |
||
44 | ServiceLoader<CRSAuthorityFactory> loader = (ServiceLoader<CRSAuthorityFactory>) ServiceLoader.load(CRSAuthorityFactory.class); |
||
45 | Iterator<CRSAuthorityFactory> iterator = loader.iterator();
|
||
46 | CRSAuthorityFactory factory; |
||
47 | while (iterator.hasNext()) {
|
||
48 | factory = iterator.next(); |
||
49 | Set<String> authCodes; |
||
50 | try {
|
||
51 | authCodes = factory.getAuthorityCodes(CoordinateReferenceSystem.class); |
||
52 | for (String code: authCodes) { |
||
53 | codes.add(code); |
||
54 | } |
||
55 | } catch (FactoryException e) {
|
||
56 | // TODO Auto-generated catch block
|
||
57 | e.printStackTrace(); |
||
58 | } |
||
59 | |||
60 | } |
||
61 | return codes;
|
||
62 | } |
||
63 | |||
64 | @Override
|
||
65 | public List<String> getCodes(String authorityName) { |
||
66 | ArrayList<String> codes = new ArrayList<String>(); |
||
67 | try {
|
||
68 | CRSAuthorityFactory factory = CRS.getAuthorityFactory(authorityName); |
||
69 | Set<String> authCodes; |
||
70 | authCodes = factory.getAuthorityCodes(CoordinateReferenceSystem.class); |
||
71 | for (String code: authCodes) { |
||
72 | codes.add(code); |
||
73 | } |
||
74 | } catch (FactoryException e) {
|
||
75 | // TODO Auto-generated catch block
|
||
76 | e.printStackTrace(); |
||
77 | } |
||
78 | |||
79 | return codes;
|
||
80 | } |
||
81 | |||
82 | @Override
|
||
83 | public List<String> search(String searchString) { |
||
84 | // TODO Auto-generated method stub
|
||
85 | return null; |
||
86 | } |
||
87 | |||
88 | @Override
|
||
89 | public List<String> search(String authority, String searchString) { |
||
90 | // TODO Auto-generated method stub
|
||
91 | return null; |
||
92 | } |
||
93 | |||
94 | @Override
|
||
95 | public CRSDefinition getCRSDefinition(String code) throws CoordinateReferenceSystemNotFoundException { |
||
96 | CoordinateReferenceSystem crs; |
||
97 | try {
|
||
98 | crs = CRS.forCode(code); |
||
99 | } catch (NoSuchAuthorityCodeException e) {
|
||
100 | throw new CoordinateReferenceSystemNotFoundException(code, e); |
||
101 | } catch (FactoryException e) {
|
||
102 | // FIXME: authoritynotfoundexception;
|
||
103 | throw new CoordinateReferenceSystemNotFoundException(code, e); |
||
104 | } |
||
105 | 818 | cmartinez | return new DefaultCRS(crs); |
106 | 813 | cmartinez | } |
107 | |||
108 | public CRSDefinition getCRSDefinition(CoordinateReferenceSystem crs) throws CoordinateReferenceSystemNotFoundException { |
||
109 | 818 | cmartinez | return new DefaultCRS(crs); |
110 | 813 | cmartinez | } |
111 | |||
112 | @Override
|
||
113 | public CRSDefinition getCRSDefinitionFromWKT(String wkt) throws CoordinateReferenceSystemNotFoundException { |
||
114 | CoordinateReferenceSystem crs; |
||
115 | try {
|
||
116 | crs = CRS.fromWKT(wkt); |
||
117 | } catch (NoSuchAuthorityCodeException e) {
|
||
118 | // FIXME: unsupported crs type; // FIXME: failed parsing??
|
||
119 | throw new CoordinateReferenceSystemNotFoundException(wkt, e); |
||
120 | } catch (FactoryException e) {
|
||
121 | // FIXME: authoritynotfoundexception;
|
||
122 | throw new CoordinateReferenceSystemNotFoundException(wkt, e); |
||
123 | } |
||
124 | 818 | cmartinez | return new DefaultCRS(crs); |
125 | 813 | cmartinez | } |
126 | |||
127 | @Override
|
||
128 | public CRSDefinition getCompoundCRS(CRSDefinition... crsList) throws IncompatibleDefinitionException { |
||
129 | 818 | cmartinez | DefaultCRS[] defs = (DefaultCRS[]) crsList; |
130 | 813 | cmartinez | ArrayList<CoordinateReferenceSystem> components = new ArrayList<CoordinateReferenceSystem>(); |
131 | for (CRSDefinition def: defs) {
|
||
132 | 818 | cmartinez | if (def instanceof DefaultCRS) { |
133 | components.add(((DefaultCRS)def).getInternalCRS()); |
||
134 | 813 | cmartinez | } |
135 | else {
|
||
136 | throw new IncompatibleDefinitionException(); |
||
137 | } |
||
138 | |||
139 | } |
||
140 | CoordinateReferenceSystem compoundCRS; |
||
141 | try {
|
||
142 | compoundCRS = CRS.compound(components.toArray(new CoordinateReferenceSystem[components.size()]));
|
||
143 | 818 | cmartinez | return new DefaultCRS(compoundCRS); |
144 | 813 | cmartinez | } catch (FactoryException e) {
|
145 | // FIXME: which kind of exception
|
||
146 | throw new IncompatibleDefinitionException(e); |
||
147 | } |
||
148 | } |
||
149 | |||
150 | @Override
|
||
151 | public TransformationDefinition getTransformationDefinition(String code) { |
||
152 | // TODO Auto-generated method stub
|
||
153 | return null; |
||
154 | } |
||
155 | |||
156 | public TransformationDefinition getTransformationDefinition(CoordinateOperation operation, boolean inverse) { |
||
157 | // TODO Auto-generated method stub
|
||
158 | return null; |
||
159 | } |
||
160 | |||
161 | @Override
|
||
162 | public TransformationDefinition getTransformationDefinitionFromWKT(String wkt) { |
||
163 | // TODO Auto-generated method stub
|
||
164 | return null; |
||
165 | } |
||
166 | |||
167 | @Override
|
||
168 | public String registerCoordinateReferenceSystem(String wktDefinition, String description) { |
||
169 | // TODO Auto-generated method stub
|
||
170 | return null; |
||
171 | } |
||
172 | |||
173 | @Override
|
||
174 | public String registerTransformation(String wktDefinition, String description) { |
||
175 | // TODO Auto-generated method stub
|
||
176 | return null; |
||
177 | } |
||
178 | |||
179 | @Override
|
||
180 | public String registerCoordinateTransformationPVT(String sourceCRS, String targetCRS, String description, |
||
181 | float xTraslation, float yTraslation, float zTraslation, float xRotation, float yRotation, float zRotation, |
||
182 | float scaleDifference) {
|
||
183 | // TODO Auto-generated method stub
|
||
184 | return null; |
||
185 | } |
||
186 | |||
187 | @Override
|
||
188 | public String registerCoordinateTransformationCFR(String sourceCRS, String targetCRS, String description, |
||
189 | float xTraslation, float yTraslation, float zTraslation, float xRotation, float yRotation, float zRotation, |
||
190 | float scaleDifference) {
|
||
191 | // TODO Auto-generated method stub
|
||
192 | return null; |
||
193 | } |
||
194 | |||
195 | @Override
|
||
196 | public String registerCoordinateTransformation(String sourceCRS, String targetCRS, String description, |
||
197 | File ntv2Grid) {
|
||
198 | // TODO Auto-generated method stub
|
||
199 | return null; |
||
200 | } |
||
201 | |||
202 | @Override
|
||
203 | public List<TransformationDefinition> getCoordinateTransformations(CRSDefinition source, CRSDefinition target) throws CRSCatalogException { |
||
204 | ArrayList<TransformationDefinition> transforms = new ArrayList<TransformationDefinition>(); |
||
205 | try {
|
||
206 | 818 | cmartinez | CoordinateReferenceSystem sourceCRS = ((DefaultCRS)source).getInternalCRS(); |
207 | CoordinateReferenceSystem targetCRS = ((DefaultCRS)target).getInternalCRS(); |
||
208 | DefaultTransformation def = new DefaultTransformation(CRS.findOperation(sourceCRS, targetCRS, null)); |
||
209 | 813 | cmartinez | transforms.add(def); |
210 | } catch (NoSuchAuthorityCodeException e) {
|
||
211 | // TODO Auto-generated catch block
|
||
212 | e.printStackTrace(); |
||
213 | } catch (FactoryException e) {
|
||
214 | // TODO Auto-generated catch block
|
||
215 | e.printStackTrace(); |
||
216 | } catch (ClassCastException e) { |
||
217 | throw new IncompatibleDefinitionException(e); |
||
218 | } |
||
219 | return transforms;
|
||
220 | } |
||
221 | |||
222 | @Override
|
||
223 | public List<TransformationDefinition> getCoordinateTransformations(String source, String target) { |
||
224 | ArrayList<TransformationDefinition> transforms = new ArrayList<TransformationDefinition>(); |
||
225 | try {
|
||
226 | CoordinateReferenceSystem sourceCRS = CRS.forCode(source); |
||
227 | CoordinateReferenceSystem targetCRS = CRS.forCode(target); |
||
228 | 818 | cmartinez | DefaultTransformation def = new DefaultTransformation(CRS.findOperation(sourceCRS, targetCRS, null)); |
229 | 813 | cmartinez | transforms.add(def); |
230 | } catch (NoSuchAuthorityCodeException e) {
|
||
231 | // TODO Auto-generated catch block
|
||
232 | e.printStackTrace(); |
||
233 | } catch (FactoryException e) {
|
||
234 | // TODO Auto-generated catch block
|
||
235 | e.printStackTrace(); |
||
236 | } |
||
237 | return transforms;
|
||
238 | } |
||
239 | |||
240 | } |