Revision 27215 branches/v2_0_0_prep/libraries/libGeocoding/src/org/gvsig/geocoding/styles/DoubleRange.java
DoubleRange.java | ||
---|---|---|
32 | 32 |
import java.util.Set; |
33 | 33 |
import java.util.TreeSet; |
34 | 34 |
|
35 |
import org.gvsig.fmap.dal.exception.DataException; |
|
36 |
import org.gvsig.fmap.dal.feature.Feature; |
|
35 | 37 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
36 | 38 |
import org.gvsig.fmap.geom.Geometry; |
37 | 39 |
import org.gvsig.fmap.geom.primitive.Point2D; |
... | ... | |
45 | 47 |
import org.gvsig.tools.persistence.AbstractPersistenceManager; |
46 | 48 |
import org.gvsig.tools.persistence.PersistenceException; |
47 | 49 |
import org.gvsig.tools.persistence.PersistentState; |
50 |
import org.slf4j.Logger; |
|
51 |
import org.slf4j.LoggerFactory; |
|
48 | 52 |
|
49 | 53 |
/** |
50 | 54 |
* |
... | ... | |
55 | 59 |
|
56 | 60 |
public class DoubleRange extends AbstractRange { |
57 | 61 |
|
62 |
private static final Logger log = LoggerFactory |
|
63 |
.getLogger(DoubleRange.class); |
|
64 |
|
|
58 | 65 |
private static final String FIRSTLEFTNUMBER = "firstleftnumber"; |
59 | 66 |
private static final String FIRSTRIGHTNUMBER = "firstrightnumber"; |
60 | 67 |
private static final String LASTLEFTNUMBER = "lastleftnumber"; |
... | ... | |
196 | 203 |
public Set<GeocodingResult> match(List<List<ScoredFeature>> inLists, |
197 | 204 |
Address address) { |
198 | 205 |
|
199 |
Set<GeocodingResult> outFeats = new TreeSet<GeocodingResult>();
|
|
206 |
Set<GeocodingResult> results = new TreeSet<GeocodingResult>();
|
|
200 | 207 |
|
201 | 208 |
FeatureAttributeDescriptor firstLeftNumberDesc = this |
202 | 209 |
.getFirstLeftNumber().getValue(); |
... | ... | |
208 | 215 |
.getLastRightNumber().getValue(); |
209 | 216 |
|
210 | 217 |
// get the list |
211 |
List<ScoredFeature> inFeats = inLists.get(0);
|
|
218 |
List<ScoredFeature> sFeats = inLists.get(0);
|
|
212 | 219 |
|
213 | 220 |
int number = ((NumberAddress) address).getNumber(); |
214 | 221 |
|
215 |
for (ScoredFeature feat : inFeats) { |
|
222 |
try { |
|
223 |
for (ScoredFeature sFeat : sFeats) { |
|
216 | 224 |
|
217 |
int firstL = feat.getInt(firstLeftNumberDesc.getName()); |
|
218 |
int lastL = feat.getInt(lastLeftNumberDesc.getName()); |
|
219 |
int firstR = feat.getInt(firstRightNumberDesc.getName()); |
|
220 |
int lastR = feat.getInt(lastRightNumberDesc.getName()); |
|
225 |
Feature fea = sFeat.getFeature(); |
|
221 | 226 |
|
222 |
// Number even (Par) |
|
223 |
if (number % 2 == 0) { |
|
224 |
// Left numbers - EVEN // right numbers - ODD |
|
225 |
if (firstL % 2 == 0) { |
|
226 |
if (number >= firstL && number <= lastL) { |
|
227 |
// create result |
|
228 |
GeomMatchResult res = calculatePosition(feat, number, |
|
229 |
firstL, lastL); |
|
230 |
// add result to the list |
|
231 |
outFeats.add(res); |
|
227 |
int[] range = getNumberRange(fea, firstLeftNumberDesc, |
|
228 |
lastLeftNumberDesc, firstRightNumberDesc, |
|
229 |
lastRightNumberDesc); |
|
230 |
int firstL = range[0]; |
|
231 |
int lastL = range[1]; |
|
232 |
int firstR = range[2]; |
|
233 |
int lastR = range[3]; |
|
234 |
|
|
235 |
// Number even (Par) |
|
236 |
if (number % 2 == 0) { |
|
237 |
// Left numbers - EVEN // right numbers - ODD |
|
238 |
if (firstL % 2 == 0) { |
|
239 |
if (number >= firstL && number <= lastL) { |
|
240 |
// create result |
|
241 |
GeomMatchResult res = calculatePosition(sFeat, |
|
242 |
number, firstL, lastL); |
|
243 |
// add result to the list |
|
244 |
results.add(res); |
|
245 |
} |
|
232 | 246 |
} |
247 |
// Left numbers - ODD // right numbers - EVEN |
|
248 |
else { |
|
249 |
if (number >= firstR && number <= lastR) { |
|
250 |
// create result |
|
251 |
GeomMatchResult res = calculatePosition(sFeat, |
|
252 |
number, firstR, lastR); |
|
253 |
// add result to the list |
|
254 |
results.add(res); |
|
255 |
} |
|
256 |
} |
|
233 | 257 |
} |
234 |
// Left numbers - ODD // right numbers - EVEN
|
|
258 |
// number odd (Impar)
|
|
235 | 259 |
else { |
236 |
if (number >= firstR && number <= lastR) { |
|
237 |
// create result |
|
238 |
GeomMatchResult res = calculatePosition(feat, number, |
|
239 |
firstR, lastR); |
|
240 |
// add result to the list |
|
241 |
outFeats.add(res); |
|
260 |
// Left numbers - EVEN // right numbers - ODD |
|
261 |
if (firstL % 2 == 0) { |
|
262 |
if (number >= firstR && number <= lastR) { |
|
263 |
// create result |
|
264 |
GeomMatchResult res = calculatePosition(sFeat, |
|
265 |
number, firstR, lastR); |
|
266 |
// add result to the list |
|
267 |
results.add(res); |
|
268 |
} |
|
242 | 269 |
} |
243 |
} |
|
244 |
} |
|
245 |
// number odd (Impar) |
|
246 |
else { |
|
247 |
// Left numbers - EVEN // right numbers - ODD |
|
248 |
if (firstL % 2 == 0) { |
|
249 |
if (number >= firstR && number <= lastR) { |
|
250 |
// create result |
|
251 |
GeomMatchResult res = calculatePosition(feat, number, |
|
252 |
firstR, lastR); |
|
253 |
// add result to the list |
|
254 |
outFeats.add(res); |
|
270 |
// Left numbers - ODD // right numbers - EVEN |
|
271 |
else { |
|
272 |
if (number >= firstL && number <= lastL) { |
|
273 |
// create result |
|
274 |
GeomMatchResult res = calculatePosition(sFeat, |
|
275 |
number, firstL, lastL); |
|
276 |
// add result to the list |
|
277 |
results.add(res); |
|
278 |
} |
|
255 | 279 |
} |
256 | 280 |
} |
257 |
// Left numbers - ODD // right numbers - EVEN |
|
258 |
else { |
|
259 |
if (number >= firstL && number <= lastL) { |
|
260 |
// create result |
|
261 |
GeomMatchResult res = calculatePosition(feat, number, |
|
262 |
firstL, lastL); |
|
263 |
// add result to the list |
|
264 |
outFeats.add(res); |
|
265 |
} |
|
266 |
} |
|
267 | 281 |
} |
282 |
} catch (DataException e) { |
|
283 |
log.error("Error getting the features", e); |
|
268 | 284 |
} |
269 |
return outFeats;
|
|
285 |
return results;
|
|
270 | 286 |
} |
271 | 287 |
|
272 | 288 |
/** |
... | ... | |
291 | 307 |
* @param first |
292 | 308 |
* @param last |
293 | 309 |
* @return |
310 |
* @throws DataException |
|
294 | 311 |
*/ |
295 | 312 |
private GeomMatchResult calculatePosition(ScoredFeature feat, int number, |
296 |
int first, int last) { |
|
313 |
int first, int last) throws DataException {
|
|
297 | 314 |
|
298 |
Geometry geom = feat.getDefaultGeometry(); |
|
315 |
Geometry geom = feat.getReference().getFeature().getDefaultGeometry();
|
|
299 | 316 |
com.vividsolutions.jts.geom.Geometry geJTS = MatcherUtils |
300 | 317 |
.parseGeomGVToJTS(geom); |
301 | 318 |
int relative = calculateRelativeDistance(number, first, last); |
... | ... | |
320 | 337 |
* @param last |
321 | 338 |
* @param offset |
322 | 339 |
* @return |
340 |
* @throws DataException |
|
323 | 341 |
*/ |
324 | 342 |
private GeomMatchResult calculateOffsetPosition(ScoredFeature feat, |
325 |
int number, int first, int last, int offset) { |
|
343 |
int number, int first, int last, int offset) throws DataException {
|
|
326 | 344 |
|
327 |
Geometry geom = feat.getDefaultGeometry(); |
|
345 |
Geometry geom = feat.getReference().getFeature().getDefaultGeometry();
|
|
328 | 346 |
com.vividsolutions.jts.geom.Geometry geJTS = MatcherUtils |
329 | 347 |
.parseGeomGVToJTS(geom); |
330 | 348 |
int relative = calculateRelativeDistance(number, first, last); |
... | ... | |
340 | 358 |
return res; |
341 | 359 |
} |
342 | 360 |
|
361 |
/** |
|
362 |
* |
|
363 |
* @param feat |
|
364 |
* @return |
|
365 |
*/ |
|
366 |
private int[] getNumberRange(Feature feat, |
|
367 |
FeatureAttributeDescriptor firstRightNumberDesc, |
|
368 |
FeatureAttributeDescriptor lastRightNumberDesc, |
|
369 |
FeatureAttributeDescriptor firstLeftNumberDesc, |
|
370 |
FeatureAttributeDescriptor lastLeftNumberDesc) { |
|
371 |
|
|
372 |
int[] range = new int[4]; |
|
373 |
|
|
374 |
Object oRFirst = feat.get(firstRightNumberDesc.getName()); |
|
375 |
Object oRLast = feat.get(lastRightNumberDesc.getName()); |
|
376 |
Object oLFirst = feat.get(firstLeftNumberDesc.getName()); |
|
377 |
Object oLLast = feat.get(lastLeftNumberDesc.getName()); |
|
378 |
|
|
379 |
// RIGHT FIRST |
|
380 |
if (oRFirst instanceof Double) { |
|
381 |
range[0] = ((Double) oRFirst).intValue(); |
|
382 |
} |
|
383 |
if (oRFirst instanceof Integer) { |
|
384 |
range[0] = ((Integer) oRFirst).intValue(); |
|
385 |
} |
|
386 |
if (oRFirst instanceof String) { |
|
387 |
range[0] = Integer.parseInt(((String) oRFirst)); |
|
388 |
} |
|
389 |
// RIGHT LAST |
|
390 |
if (oRLast instanceof Double) { |
|
391 |
range[1] = ((Double) oRLast).intValue(); |
|
392 |
} |
|
393 |
if (oRLast instanceof Integer) { |
|
394 |
range[1] = ((Integer) oRLast).intValue(); |
|
395 |
} |
|
396 |
if (oRLast instanceof String) { |
|
397 |
range[1] = Integer.parseInt(((String) oRLast)); |
|
398 |
} |
|
399 |
// LEFT FIRST |
|
400 |
if (oLFirst instanceof Double) { |
|
401 |
range[2] = ((Double) oLFirst).intValue(); |
|
402 |
} |
|
403 |
if (oLFirst instanceof Integer) { |
|
404 |
range[2] = ((Integer) oLFirst).intValue(); |
|
405 |
} |
|
406 |
if (oLFirst instanceof String) { |
|
407 |
range[2] = Integer.parseInt(((String) oLFirst)); |
|
408 |
} |
|
409 |
// LEFT LAST |
|
410 |
if (oLLast instanceof Double) { |
|
411 |
range[3] = ((Double) oLLast).intValue(); |
|
412 |
} |
|
413 |
if (oLLast instanceof Integer) { |
|
414 |
range[3] = ((Integer) oLLast).intValue(); |
|
415 |
} |
|
416 |
if (oLLast instanceof String) { |
|
417 |
range[3] = Integer.parseInt(((String) oLLast)); |
|
418 |
} |
|
419 |
|
|
420 |
return range; |
|
421 |
} |
|
422 |
|
|
343 | 423 |
} |
Also available in: Unified diff