Revision 2067 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; |
|
32 | 35 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
33 | 36 |
import org.gvsig.expressionevaluator.GeometryExpressionBuilder; |
34 | 37 |
import org.gvsig.expressionevaluator.GeometryExpressionUtils; |
... | ... | |
372 | 375 |
); |
373 | 376 |
final SpatialIndex dataIndex = theStore.wrapSpatialIndex(geomIndex); |
374 | 377 |
try { |
375 |
store.accept((Object o) -> { |
|
376 |
Feature f = (Feature) o; |
|
377 |
Geometry geom = f.getDefaultGeometry(); |
|
378 |
if (geom != null) { |
|
379 |
dataIndex.insert(geom, f); |
|
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 |
} |
|
380 | 386 |
} |
381 | 387 |
}); |
382 | 388 |
} catch (VisitCanceledException ex) { |
... | ... | |
390 | 396 |
return this.spatialIndex.getValue(); |
391 | 397 |
} |
392 | 398 |
|
393 |
|
|
394 | 399 |
@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 |
|
515 | 400 |
public Iterable<FeatureReference> query(Geometry geom) { |
516 | 401 |
return this.queryReferences(geom); |
517 | 402 |
} |
... | ... | |
550 | 435 |
} |
551 | 436 |
FeatureSet set = theStore.getFeatureSet(expression); |
552 | 437 |
final DisposableIterator it = set.fastIterator(); |
553 |
return () -> new Iterator<FeatureReference>() {
|
|
438 |
return new Iterable<FeatureReference>() {
|
|
554 | 439 |
@Override |
555 |
public boolean hasNext() { |
|
556 |
return it.hasNext(); |
|
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 |
}; |
|
557 | 453 |
} |
558 |
|
|
559 |
@Override |
|
560 |
public FeatureReference next() { |
|
561 |
Feature f = (Feature) it.next(); |
|
562 |
return f.getReference(); |
|
563 |
} |
|
564 | 454 |
}; |
565 | 455 |
|
566 | 456 |
} catch(Exception ex) { |
... | ... | |
571 | 461 |
if( it == null ) { |
572 | 462 |
return (Iterable<FeatureReference>) IteratorUtils.EMPTY_ITERATOR; |
573 | 463 |
} |
574 |
return () -> it; |
|
464 |
return new Iterable<FeatureReference>() { |
|
465 |
@Override |
|
466 |
public Iterator<FeatureReference> iterator() { |
|
467 |
return it; |
|
468 |
} |
|
469 |
}; |
|
575 | 470 |
} |
576 | 471 |
|
577 | 472 |
@Override |
... | ... | |
608 | 503 |
} |
609 | 504 |
FeatureSet set = theStore.getFeatureSet(expression); |
610 | 505 |
final DisposableIterator it = set.fastIterator(); |
611 |
return () -> it; |
|
506 |
return new Iterable<Feature>() { |
|
507 |
@Override |
|
508 |
public Iterator<Feature> iterator() { |
|
509 |
return it; |
|
510 |
} |
|
511 |
}; |
|
612 | 512 |
|
613 | 513 |
} catch(Exception ex) { |
614 | 514 |
return (Iterable<Feature>) IteratorUtils.EMPTY_ITERATOR; |
... | ... | |
618 | 518 |
if( it == null ) { |
619 | 519 |
return (Iterable<Feature>) IteratorUtils.EMPTY_ITERATOR; |
620 | 520 |
} |
621 |
return () -> new Iterator<Feature>() {
|
|
521 |
return new Iterable<Feature>() {
|
|
622 | 522 |
@Override |
623 |
public boolean hasNext() { |
|
624 |
return it.hasNext(); |
|
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 |
}; |
|
625 | 540 |
} |
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 |
} |
|
636 | 541 |
}; |
637 | 542 |
} |
638 | 543 |
|
Also available in: Unified diff