Revision 1885 org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/lib/impl/DefaultTopologyDataSet.java
DefaultTopologyDataSet.java | ||
---|---|---|
29 | 29 |
import org.apache.commons.lang3.StringUtils; |
30 | 30 |
import org.apache.commons.lang3.mutable.MutableObject; |
31 | 31 |
import org.gvsig.expressionevaluator.Expression; |
32 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
33 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
34 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
35 | 32 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
36 | 33 |
import org.gvsig.expressionevaluator.GeometryExpressionBuilder; |
37 | 34 |
import org.gvsig.expressionevaluator.GeometryExpressionUtils; |
... | ... | |
375 | 372 |
); |
376 | 373 |
final SpatialIndex dataIndex = theStore.wrapSpatialIndex(geomIndex); |
377 | 374 |
try { |
378 |
store.accept(new Visitor() { |
|
379 |
@Override |
|
380 |
public void visit(Object o) throws VisitCanceledException, BaseException { |
|
381 |
Feature f = (Feature) o; |
|
382 |
Geometry geom = f.getDefaultGeometry(); |
|
383 |
if (geom != null) { |
|
384 |
dataIndex.insert(geom, f); |
|
385 |
} |
|
375 |
store.accept((Object o) -> { |
|
376 |
Feature f = (Feature) o; |
|
377 |
Geometry geom = f.getDefaultGeometry(); |
|
378 |
if (geom != null) { |
|
379 |
dataIndex.insert(geom, f); |
|
386 | 380 |
} |
387 | 381 |
}); |
388 | 382 |
} catch (VisitCanceledException ex) { |
... | ... | |
396 | 390 |
return this.spatialIndex.getValue(); |
397 | 391 |
} |
398 | 392 |
|
393 |
|
|
399 | 394 |
@Override |
395 |
public Iterable<FeatureReference> getFeatureReferencesThatEnvelopeIntersectsWith(Geometry geom) { |
|
396 |
SpatialIndex index = this.getSpatialIndex(); |
|
397 |
if( index == null ) { |
|
398 |
try { |
|
399 |
FeatureStore theStore = (FeatureStore) this.getStore(); |
|
400 |
Expression expression = ExpressionUtils.createExpression(); |
|
401 |
GeometryExpressionBuilder expressionBuilder = GeometryExpressionUtils.createExpressionBuilder(); |
|
402 |
String geomName = theStore.getDefaultFeatureType().getDefaultGeometryAttributeName(); |
|
403 |
if( GeometryUtils.isSubtype(Geometry.TYPES.POINT, geom.getType()) ) { |
|
404 |
expression.setPhrase( |
|
405 |
expressionBuilder.ifnull( |
|
406 |
expressionBuilder.column(geomName), |
|
407 |
expressionBuilder.constant(false), |
|
408 |
expressionBuilder.ST_Intersects( |
|
409 |
expressionBuilder.column(geomName), |
|
410 |
expressionBuilder.geometry(geom) |
|
411 |
) |
|
412 |
).toString() |
|
413 |
); |
|
414 |
} else { |
|
415 |
expression.setPhrase( |
|
416 |
expressionBuilder.ifnull( |
|
417 |
expressionBuilder.column(geomName), |
|
418 |
expressionBuilder.constant(false), |
|
419 |
expressionBuilder.ST_Intersects( |
|
420 |
expressionBuilder.column(geomName), |
|
421 |
expressionBuilder.envelope(geom.getEnvelope()) |
|
422 |
) |
|
423 |
).toString() |
|
424 |
); |
|
425 |
} |
|
426 |
FeatureSet set = theStore.getFeatureSet(expression); |
|
427 |
final DisposableIterator it = set.fastIterator(); |
|
428 |
return () -> new Iterator<FeatureReference>() { |
|
429 |
@Override |
|
430 |
public boolean hasNext() { |
|
431 |
return it.hasNext(); |
|
432 |
} |
|
433 |
|
|
434 |
@Override |
|
435 |
public FeatureReference next() { |
|
436 |
Feature f = (Feature) it.next(); |
|
437 |
return f.getReference(); |
|
438 |
} |
|
439 |
}; |
|
440 |
|
|
441 |
} catch(Exception ex) { |
|
442 |
return (Iterable<FeatureReference>) IteratorUtils.EMPTY_ITERATOR; |
|
443 |
} |
|
444 |
} |
|
445 |
final Iterator it = index.query(geom); |
|
446 |
if( it == null ) { |
|
447 |
return (Iterable<FeatureReference>) IteratorUtils.EMPTY_ITERATOR; |
|
448 |
} |
|
449 |
return () -> it; |
|
450 |
} |
|
451 |
|
|
452 |
@Override |
|
453 |
public Iterable<Feature> getFeaturesThatEnvelopeIntersectsWith(Geometry geom) { |
|
454 |
SpatialIndex index = this.getSpatialIndex(); |
|
455 |
if( index == null ) { |
|
456 |
try { |
|
457 |
FeatureStore theStore = (FeatureStore) this.getStore(); |
|
458 |
Expression expression = ExpressionUtils.createExpression(); |
|
459 |
GeometryExpressionBuilder expressionBuilder = GeometryExpressionUtils.createExpressionBuilder(); |
|
460 |
String geomName = theStore.getDefaultFeatureType().getDefaultGeometryAttributeName(); |
|
461 |
if( GeometryUtils.isSubtype(Geometry.TYPES.POINT, geom.getType()) ) { |
|
462 |
expression.setPhrase( |
|
463 |
expressionBuilder.ifnull( |
|
464 |
expressionBuilder.column(geomName), |
|
465 |
expressionBuilder.constant(false), |
|
466 |
expressionBuilder.ST_Intersects( |
|
467 |
expressionBuilder.column(geomName), |
|
468 |
expressionBuilder.geometry(geom) |
|
469 |
) |
|
470 |
).toString() |
|
471 |
); |
|
472 |
} else { |
|
473 |
expression.setPhrase( |
|
474 |
expressionBuilder.ifnull( |
|
475 |
expressionBuilder.column(geomName), |
|
476 |
expressionBuilder.constant(false), |
|
477 |
expressionBuilder.ST_Intersects( |
|
478 |
expressionBuilder.column(geomName), |
|
479 |
expressionBuilder.envelope(geom.getEnvelope()) |
|
480 |
) |
|
481 |
).toString() |
|
482 |
); |
|
483 |
} |
|
484 |
FeatureSet set = theStore.getFeatureSet(expression); |
|
485 |
final DisposableIterator it = set.fastIterator(); |
|
486 |
return () -> it; |
|
487 |
|
|
488 |
} catch(Exception ex) { |
|
489 |
return (Iterable<Feature>) IteratorUtils.EMPTY_ITERATOR; |
|
490 |
} |
|
491 |
} |
|
492 |
final Iterator it = index.query(geom); |
|
493 |
if( it == null ) { |
|
494 |
return (Iterable<Feature>) IteratorUtils.EMPTY_ITERATOR; |
|
495 |
} |
|
496 |
return () -> new Iterator<Feature>() { |
|
497 |
@Override |
|
498 |
public boolean hasNext() { |
|
499 |
return it.hasNext(); |
|
500 |
} |
|
501 |
|
|
502 |
@Override |
|
503 |
public Feature next() { |
|
504 |
FeatureReference ref = (FeatureReference) it.next(); |
|
505 |
try { |
|
506 |
return ref.getFeature(); |
|
507 |
} catch (DataException ex) { |
|
508 |
return null; |
|
509 |
} |
|
510 |
} |
|
511 |
}; |
|
512 |
} |
|
513 |
|
|
514 |
@Override |
|
400 | 515 |
public Iterable<FeatureReference> query(Geometry geom) { |
401 | 516 |
return this.queryReferences(geom); |
402 | 517 |
} |
... | ... | |
435 | 550 |
} |
436 | 551 |
FeatureSet set = theStore.getFeatureSet(expression); |
437 | 552 |
final DisposableIterator it = set.fastIterator(); |
438 |
return new Iterable<FeatureReference>() {
|
|
553 |
return () -> new Iterator<FeatureReference>() {
|
|
439 | 554 |
@Override |
440 |
public Iterator<FeatureReference> iterator() { |
|
441 |
return new Iterator<FeatureReference>() { |
|
442 |
@Override |
|
443 |
public boolean hasNext() { |
|
444 |
return it.hasNext(); |
|
445 |
} |
|
446 |
|
|
447 |
@Override |
|
448 |
public FeatureReference next() { |
|
449 |
Feature f = (Feature) it.next(); |
|
450 |
return f.getReference(); |
|
451 |
} |
|
452 |
}; |
|
555 |
public boolean hasNext() { |
|
556 |
return it.hasNext(); |
|
453 | 557 |
} |
558 |
|
|
559 |
@Override |
|
560 |
public FeatureReference next() { |
|
561 |
Feature f = (Feature) it.next(); |
|
562 |
return f.getReference(); |
|
563 |
} |
|
454 | 564 |
}; |
455 | 565 |
|
456 | 566 |
} catch(Exception ex) { |
... | ... | |
461 | 571 |
if( it == null ) { |
462 | 572 |
return (Iterable<FeatureReference>) IteratorUtils.EMPTY_ITERATOR; |
463 | 573 |
} |
464 |
return new Iterable<FeatureReference>() { |
|
465 |
@Override |
|
466 |
public Iterator<FeatureReference> iterator() { |
|
467 |
return it; |
|
468 |
} |
|
469 |
}; |
|
574 |
return () -> it; |
|
470 | 575 |
} |
471 | 576 |
|
472 | 577 |
@Override |
... | ... | |
503 | 608 |
} |
504 | 609 |
FeatureSet set = theStore.getFeatureSet(expression); |
505 | 610 |
final DisposableIterator it = set.fastIterator(); |
506 |
return new Iterable<Feature>() { |
|
507 |
@Override |
|
508 |
public Iterator<Feature> iterator() { |
|
509 |
return it; |
|
510 |
} |
|
511 |
}; |
|
611 |
return () -> it; |
|
512 | 612 |
|
513 | 613 |
} catch(Exception ex) { |
514 | 614 |
return (Iterable<Feature>) IteratorUtils.EMPTY_ITERATOR; |
... | ... | |
518 | 618 |
if( it == null ) { |
519 | 619 |
return (Iterable<Feature>) IteratorUtils.EMPTY_ITERATOR; |
520 | 620 |
} |
521 |
return new Iterable<Feature>() {
|
|
621 |
return () -> new Iterator<Feature>() {
|
|
522 | 622 |
@Override |
523 |
public Iterator<Feature> iterator() { |
|
524 |
return new Iterator<Feature>() { |
|
525 |
@Override |
|
526 |
public boolean hasNext() { |
|
527 |
return it.hasNext(); |
|
528 |
} |
|
529 |
|
|
530 |
@Override |
|
531 |
public Feature next() { |
|
532 |
FeatureReference ref = (FeatureReference) it.next(); |
|
533 |
try { |
|
534 |
return ref.getFeature(); |
|
535 |
} catch (DataException ex) { |
|
536 |
return null; |
|
537 |
} |
|
538 |
} |
|
539 |
}; |
|
623 |
public boolean hasNext() { |
|
624 |
return it.hasNext(); |
|
540 | 625 |
} |
626 |
|
|
627 |
@Override |
|
628 |
public Feature next() { |
|
629 |
FeatureReference ref = (FeatureReference) it.next(); |
|
630 |
try { |
|
631 |
return ref.getFeature(); |
|
632 |
} catch (DataException ex) { |
|
633 |
return null; |
|
634 |
} |
|
635 |
} |
|
541 | 636 |
}; |
542 | 637 |
} |
543 | 638 |
|
Also available in: Unified diff