Revision 1885

View differences:

org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.api/src/main/java/org/gvsig/topology/lib/api/TopologyDataSet.java
81 81
    /**
82 82
     * @param geom
83 83
     * @return 
84
     * @deprecated  use queryFeatures or queryReferences
84
     * @deprecated  use getFeaturesThatEnvelopeIntersectsWith 
85
     *              or getFeatureReferencessThatEnvelopeIntersectsWith
85 86
     */
86 87
    public Iterable<FeatureReference> query(Geometry geom);
87 88
    
89
    /**
90
     * @param geom
91
     * @return 
92
     * @deprecated  use getFeaturesThatEnvelopeIntersectsWith 
93
     */
88 94
    public Iterable<Feature> queryFeatures(Geometry geom);
89 95
    
96
    /**
97
     * @param geom
98
     * @return 
99
     * @deprecated  use getFeatureReferencesThatEnvelopeIntersectsWith
100
     */
90 101
    public Iterable<FeatureReference> queryReferences(Geometry geom);
91 102

  
103
    public Iterable<Feature>  getFeaturesThatEnvelopeIntersectsWith(Geometry geom);
104

  
105
    public Iterable<FeatureReference>  getFeatureReferencesThatEnvelopeIntersectsWith(Geometry geom);
106

  
92 107
    public Feature findFirst(Expression expression);
93 108

  
94 109
    public void restart();
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
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