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 | ||
---|---|---|
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