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

View differences:

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