Revision 54 org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.lib/org.gvsig.lrs.lib.impl/src/main/java/org/gvsig/lrs/lib/impl/LrsCalibrateRouteAlgorithm.java

View differences:

LrsCalibrateRouteAlgorithm.java
29 29
import java.util.Map.Entry;
30 30

  
31 31
import org.cresques.cts.IProjection;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

  
32 35
import org.gvsig.fmap.dal.feature.EditableFeature;
33 36
import org.gvsig.fmap.dal.feature.Feature;
34 37
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
......
58 61
import org.gvsig.tools.task.SimpleTaskStatus;
59 62
import org.gvsig.tools.visitor.VisitCanceledException;
60 63
import org.gvsig.tools.visitor.Visitor;
61
import org.slf4j.Logger;
62
import org.slf4j.LoggerFactory;
63 64

  
64 65
/**
65 66
 * @author dmartinez
......
104 105
        if(!(params instanceof LrsCreateRouteAlgorithmParams)){
105 106
            throw new IllegalArgumentException("params should be LrsCalibrateRouteAlgorithmParams type.");
106 107
        }
107
        // TODO Auto-generated method stub
108
        this.parameters = (LrsCalibrateRouteAlgorithmParams) params;
108 109
    }
109 110

  
110 111
    /*
......
143 144
                sourceFeatures = sourceFeatureStore.getFeatureSet();
144 145
            }
145 146

  
146
            final Map<String, Object[]> featuresMap =
147
                new HashMap<String, Object[]>();
147
            final Map<String, RouteAndPoints> featuresMap =
148
                new HashMap<String, RouteAndPoints>();
148 149
            sourceFeatures.accept(new Visitor() {
149 150

  
150 151
                public void visit(Object obj)
151 152
                    throws VisitCanceledException, BaseException {
152 153
                    Feature feature = (Feature) obj;
153 154
                    String routeName = (String) feature.get(routeFieldName);
154
                    List<Point> points = new ArrayList<Point>();
155
                    Object[] valueObject=new Object[2];
156
                    valueObject[0]=feature.getDefaultGeometry();
157
                    valueObject[1]=points;
155
                    RouteAndPoints routeAndPoints = new RouteAndPoints(feature.getDefaultGeometry(), new ArrayList<Point>());
158 156

  
159
                    featuresMap.put(routeName, valueObject);
157
                    featuresMap.put(routeName, routeAndPoints);
160 158
                }
161 159
            });
162 160

  
......
198 196

  
199 197
            newFeatureStore.edit(FeatureStore.MODE_FULLEDIT);
200 198

  
201
            for (Entry<String, Object[]> entry : featuresMap
202
                .entrySet()) {
199
            for (Entry<String, RouteAndPoints> entry : featuresMap.entrySet()) {
203 200
                String routeName = entry.getKey();
204 201
                Object valueObject = entry.getValue();
205 202
                List<Point> points=null;
206 203
                Geometry geometry=null;
207 204

  
208
                if (valueObject!=null && valueObject instanceof Object[]){
209
                    Object[] objArray=(Object[])valueObject;
210
                    if (objArray[0] instanceof Geometry){
211
                        geometry=(Geometry)objArray[0];
212
                    }
213
                    if (objArray[1] instanceof List){
214
                        points=(List<Point>)objArray[1];
215
                    }
205
                if (valueObject!=null && valueObject instanceof RouteAndPoints){
206
                    RouteAndPoints routeAndPoints=(RouteAndPoints)valueObject;
207
                        geometry=routeAndPoints.getRoute();
208
                        points=routeAndPoints.getPoints();
216 209
                }
217 210
                if (!points.isEmpty()){
218 211
                    EditableFeature newFeature =
......
221 214
                    Geometry calibratedRoute = calibrateRoute(geometry,points);
222 215
                    newFeature.setDefaultGeometry(calibratedRoute);
223 216
                    newFeatureStore.update(newFeature);
224
                }else{
225
                    if (includeAll){
226
                        EditableFeature newFeature =
227
                            newFeatureStore.createNewFeature(true);
228
                        newFeature.set(routeFieldName, routeName);
229
                        newFeature.setDefaultGeometry(geometry);
230
                        newFeatureStore.update(newFeature);
231
                    }
217
                } else if (includeAll) {
218
                    EditableFeature newFeature = newFeatureStore.createNewFeature(true);
219
                    newFeature.set(routeFieldName, routeName);
220
                    newFeature.setDefaultGeometry(geometry);
221
                    newFeatureStore.update(newFeature);
232 222
                }
233 223
                taskCount++;
234 224
                taskStatus.setCurValue(taskCount);
......
264 254
        DistanceUnits measureUnits = parameters.getMeasureUnits();
265 255
        FeatureStore sourceFeatureStore = parameters.getSourceFeatureStore();
266 256

  
267
        IProjection projection;
268 257
        try {
269
            projection = sourceFeatureStore.getDefaultFeatureType().getDefaultSRS();
258
            IProjection projection = sourceFeatureStore.getDefaultFeatureType().getDefaultSRS();
270 259

  
271 260
            Double searchRadiusInMeters=searchRadius*measureUnits.getTransToMeter();
272 261
            //TODO
273
            //DistanceUnits projectionDistanceUnits=getProjectionDistanceUnits(projection);
262
//            DistanceUnits projectionDistanceUnits=getProjectionDistanceUnits(projection);
274 263
            //return searchRadiusInMeters/projectionDistanceUnits.getTransToMeter();
275 264
            return searchRadiusInMeters;
276 265
        } catch (Exception e) {
......
434 423
                for (int i=0; i<lines.size();i++){
435 424
                    Line line=lines.get(i);
436 425
                    try{
437
                        //FIXME
438
                        //if (line.intersects(fixedPoint)){
439 426
                        if (line.isWithinDistance(fixedPoint, PRECISION)){
440 427
                            length=distances.get(index);
441 428
                            for (int j=0;j<line.getNumVertices();j++){
......
451 438
                                    Double mValue=fixedPoint.getCoordinateAt(MDIMENSION);
452 439
                                    vertex.setCoordinateAt(MDIMENSION, mValue);
453 440
                                    isFixedPoint.set(index, true);
454
                                    vertices.set(index, vertex);
441
//                                    vertices.set(index, vertex);
455 442
                                }else{
456 443
                                    if (nextVertex!=null
457 444
                                        && !LrsAlgorithmUtils.equalPoints(nextVertex, fixedPoint)
......
649 636
                return nextFixedPointPos;
650 637
            }else{
651 638
                int lastPositionInLine=getLastPositionInLine(pos);
652
                nextFixedPointPos=findNextFixedPointInNextLines(lastPositionInLine,new ArrayList<Integer>());
653
                if (nextFixedPointPos!=null){
654
                    return nextFixedPointPos;
655
                }
656
                try{
639
                        nextFixedPointPos=findNextFixedPointInNextLines(lastPositionInLine,new ArrayList<Integer>());
640
                        if (nextFixedPointPos!=null){
641
                            return nextFixedPointPos;
642
                        }
643
                        try{
657 644
                    Integer nearestVertex=findNearestNextPoint(lastPositionInLine);
658 645
                    return getNextPosFixedPoint(nearestVertex);
659
                }catch (Exception e){
660
                    return null;
646
                        }catch (Exception e){
647
                            return null;
648
                        }
649
                    }
661 650
                }
662
            }
663
        }
664 651

  
665 652
        private Integer getLastPositionInLine (int pos){
666 653
            Integer lineVisited=lineIndexes.get(pos);
667 654
            for (int i=pos+1;i<vertices.size();i++){
668 655
                if (!lineVisited.equals(lineIndexes.get(i))){
669 656
                    return i-1;
670
                }
671 657
            }
658
        }
672 659
            return vertices.size()-1;
673 660
        }
674 661

  
......
711 698
            double nearestDistance = Double.POSITIVE_INFINITY;
712 699
            Integer nearestPointPos=null;
713 700
            for (int i=vertexPos+1;i<vertices.size();i++){
714
                Double distance=vertex.distance(vertices.get(i));
701
                    Double distance=vertex.distance(vertices.get(i));
715 702
                if(nearestDistance>distance && distance>Double.valueOf(0)){
716
                    nearestDistance=distance;
717
                    nearestPointPos=i;
703
                        nearestDistance=distance;
704
                        nearestPointPos=i;
705
                    }
718 706
                }
719
            }
720 707
            return nearestPointPos;
721 708
        }
722 709

  
......
785 772

  
786 773
    }
787 774

  
775
    private class RouteAndPoints {
776
        private Geometry route;
777
        private List<Point> points;
788 778

  
779

  
780
        /**
781
         *
782
         */
783
        public RouteAndPoints(Geometry route, List<Point> points) {
784
            this.setRoute(route);
785
            this.setPoints(points);
786
        }
787

  
788

  
789
        /**
790
         * @return the route
791
         */
792
        public Geometry getRoute() {
793
            return route;
794
        }
795

  
796

  
797
        /**
798
         * @param route the route to set
799
         */
800
        public void setRoute(Geometry route) {
801
            this.route = route;
802
        }
803

  
804

  
805
        /**
806
         * @return the points
807
         */
808
        public List<Point> getPoints() {
809
            return points;
810
        }
811

  
812

  
813
        /**
814
         * @param points the points to set
815
         */
816
        public void setPoints(List<Point> points) {
817
            this.points = points;
818
        }
819

  
820
    }
789 821
}
790 822

  
791 823

  

Also available in: Unified diff