Revision 320 org.gvsig.projection.jcrs/trunk/org.gvsig.projection.jcrs/org.gvsig.projection.jcrs.lib/src/main/java/org/gvsig/crs/CrsFactory.java
CrsFactory.java | ||
---|---|---|
66 | 66 |
* @throws CrsException |
67 | 67 |
*/ |
68 | 68 |
public ICrs getCRS(String code) throws CrsException { |
69 |
return getCRS(code,null,null); |
|
70 |
} |
|
69 | 71 |
|
70 |
if (enableMemoryCache && data.containsKey(code)) { |
|
71 |
return (ICrs) data.get(code); |
|
72 |
public ICrs getCRS(String code, String theSourceParams, String theTargetParams) throws CrsException { |
|
73 |
|
|
74 |
String keyOfCache = getKeyOfCache(code,theSourceParams,theTargetParams); |
|
75 |
if (enableMemoryCache && data.containsKey(keyOfCache)) { |
|
76 |
return (ICrs) data.get(keyOfCache); |
|
72 | 77 |
} |
78 |
String sourceParams = theSourceParams; |
|
79 |
String targetParams = theTargetParams; |
|
80 |
String crsCode = code; |
|
81 |
|
|
82 |
ICrs crs = null; |
|
83 |
|
|
84 |
if ( code.indexOf(":", code.indexOf(":") + 1) >= 0 ) { |
|
85 |
crsCode = code.substring(0, code.indexOf(":", code.indexOf(":") + 1)); |
|
86 |
if ( code.indexOf("@") == -1 ) { |
|
87 |
crsCode = crsCode.substring(0, crsCode.indexOf(",")); |
|
88 |
} else { |
|
89 |
sourceParams = code.substring(code.indexOf("@") + 1, code.lastIndexOf("@")); |
|
90 |
targetParams = code.substring(code.lastIndexOf("@") + 1); |
|
91 |
|
|
92 |
if ( sourceParams.equals("") ) { |
|
93 |
sourceParams = null; |
|
94 |
} else if ( targetParams.equals("1") ) { // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas. |
|
95 |
targetParams = sourceParams; |
|
96 |
sourceParams = ""; |
|
97 |
} |
|
98 |
if ( targetParams.equals("") || targetParams.equals("0") ) // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas. |
|
99 |
{ |
|
100 |
targetParams = null; |
|
101 |
} |
|
102 |
} |
|
103 |
} |
|
104 |
crs = getSimpleCRS(crsCode); |
|
105 |
if( sourceParams!=null || targetParams!=null ) { |
|
106 |
crs.setTransformationParams(sourceParams, targetParams); |
|
107 |
} |
|
108 |
|
|
109 |
if( enableMemoryCache ) { |
|
110 |
keyOfCache = getKeyOfCache(crsCode,sourceParams,targetParams); |
|
111 |
data.put(keyOfCache, crs); |
|
112 |
} |
|
113 |
|
|
114 |
|
|
115 |
return crs; |
|
116 |
} |
|
117 |
|
|
118 |
private String getKeyOfCache(String code, String theSourceParams, String theTargetParams) { |
|
119 |
String keyOfCache = code; |
|
120 |
if( theSourceParams!=null ) { |
|
121 |
keyOfCache += ":proj@" + theSourceParams + "@"; |
|
122 |
if( theTargetParams!=null ) { |
|
123 |
keyOfCache += theTargetParams; |
|
124 |
} |
|
125 |
} |
|
126 |
return keyOfCache; |
|
127 |
} |
|
128 |
|
|
129 |
private ICrs getSimpleCRS(String code) throws CrsException { |
|
130 |
|
|
73 | 131 |
String repoId = ""; |
74 | 132 |
String crsCode = ""; |
75 | 133 |
ICrs crs = null; |
76 | 134 |
ICrsRepository repo = null; |
77 | 135 |
|
78 | 136 |
try { |
79 |
if ( code.indexOf(":", code.indexOf(":") + 1) < 0 ) { |
|
80 | 137 |
repoId = code.substring(0, code.indexOf(":")); |
81 | 138 |
crsCode = code.substring(code.indexOf(":") + 1); |
82 | 139 |
|
... | ... | |
116 | 173 |
crs = repo.getCrs(crsCode); |
117 | 174 |
} |
118 | 175 |
} |
119 |
} else { |
|
120 |
String sourceParams = null; |
|
121 |
String targetParams = null; |
|
122 |
|
|
123 |
crsCode = code.substring(0, code.indexOf(":", code.indexOf(":") + 1)); |
|
124 |
if ( code.indexOf("@") == -1 ) { |
|
125 |
crsCode = crsCode.substring(0, crsCode.indexOf(",")); |
|
176 |
if ( crs == null ) { |
|
177 |
logger.debug("Can't find CRS '" + code + "' in available repositories."); |
|
126 | 178 |
} else { |
127 |
sourceParams = code.substring(code.indexOf("@") + 1, code.lastIndexOf("@")); |
|
128 |
targetParams = code.substring(code.lastIndexOf("@") + 1); |
|
129 |
|
|
130 |
if ( sourceParams.equals("") ) { |
|
131 |
sourceParams = null; |
|
132 |
} else if ( targetParams.equals("1") ) { // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas. |
|
133 |
targetParams = sourceParams; |
|
134 |
sourceParams = ""; |
|
135 |
} |
|
136 |
if ( targetParams.equals("") || targetParams.equals("0") ) // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas. |
|
137 |
{ |
|
138 |
targetParams = null; |
|
139 |
} |
|
140 |
} |
|
141 |
crs = getCRS(crsCode); |
|
142 |
if ( crs != null ) { |
|
143 |
crs.setTransformationParams(sourceParams, targetParams); |
|
144 |
} |
|
145 |
|
|
146 |
} |
|
147 |
|
|
148 |
if( enableMemoryCache ) { |
|
149 |
code = crs.getAbrev(); |
|
150 |
data.put(code, crs); |
|
151 |
} |
|
152 |
|
|
153 |
if ( crs == null ) { |
|
154 |
logger.debug("Can't find CRS '" + code + "' in available repositories."); |
|
155 |
} else { |
|
156 |
logger.debug("Found CRS '" + code + "' in repository '" + |
|
157 |
(repo == null ? "unknow" : (repo.getClass().getSimpleName())) + "'."); |
|
158 |
} |
|
159 |
return crs; |
|
179 |
logger.debug("Found CRS '" + code + "' in repository '" + |
|
180 |
(repo == null ? "unknow" : (repo.getClass().getSimpleName())) + "'."); |
|
181 |
} |
|
182 |
return crs; |
|
160 | 183 |
} finally { |
161 | 184 |
if( repo instanceof Disposable ) { |
162 | 185 |
((Disposable)repo).dispose(); |
163 | 186 |
} |
164 | 187 |
} |
165 |
/*if (data.containsKey(code)) |
|
166 |
return (Crs) data.get(code); |
|
167 |
|
|
168 |
Crs crs = new Crs(code); |
|
169 |
|
|
170 |
// LWS Esta l?nea sobra, cuando el cuadro de di?logo est? |
|
171 |
// mejor hecho. |
|
172 |
code = crs.getAbrev(); |
|
173 |
|
|
174 |
data.put(code, crs); |
|
175 |
|
|
176 |
return crs;*/ |
|
177 | 188 |
} |
178 |
|
|
189 |
|
|
190 |
|
|
179 | 191 |
/** |
180 | 192 |
* |
181 | 193 |
* @param epsg_code |
... | ... | |
184 | 196 |
* @throws CrsException |
185 | 197 |
*/ |
186 | 198 |
public ICrs getCRS(int epsg_code, String code) throws CrsException { |
187 |
/*if (data.containsKey(code)) |
|
188 |
return (Crs) data.get(code);*/ |
|
189 |
|
|
190 | 199 |
Crs crs = new Crs(epsg_code, code); |
191 |
|
|
192 |
// LWS Esta l?nea sobra, cuando el cuadro de di?logo est? |
|
193 |
// mejor hecho. |
|
194 |
/*code = crs.getAbrev(); |
|
195 |
|
|
196 |
data.put(code, crs);*/ |
|
197 | 200 |
return crs; |
198 | 201 |
} |
199 | 202 |
|
... | ... | |
206 | 209 |
* @throws CrsException |
207 | 210 |
*/ |
208 | 211 |
public ICrs getCRS(int epsg_code, String code, String params) throws CrsException { |
209 |
/*if (data.containsKey(code)) |
|
210 |
return (Crs) data.get(code);*/ |
|
211 |
|
|
212 | 212 |
Crs crs = new Crs(epsg_code, code, params); |
213 |
|
|
214 |
// LWS Esta l?nea sobra, cuando el cuadro de di?logo est? |
|
215 |
// mejor hecho. |
|
216 |
/*code = crs.getAbrev(); |
|
217 |
|
|
218 |
data.put(code, crs);*/ |
|
219 | 213 |
return crs; |
220 | 214 |
} |
221 | 215 |
|
... | ... | |
224 | 218 |
*/ |
225 | 219 |
public IProjection get(String name) { |
226 | 220 |
try { |
227 |
return getCRS(name); |
|
221 |
return getCRS(name,null,null);
|
|
228 | 222 |
} catch (CrsException e) { |
229 | 223 |
logger.error("Can't cget CRS name '" + name + "'.", e); |
230 | 224 |
} |
Also available in: Unified diff