Commit 7823fb16 authored by Nils Richerzhagen's avatar Nils Richerzhagen
Browse files

Merge branch 'nr/resAlloc-clemens' into 'nr/monitoring-req-resp'

Nr/res alloc clemens

See merge request !16
parents 1fd89662 2d730a71
......@@ -24,6 +24,7 @@ import com.graphhopper.GHRequest;
import com.graphhopper.GHResponse;
import com.graphhopper.GraphHopper;
import com.graphhopper.routing.util.EncodingManager;
import com.graphhopper.util.DistanceCalc2D;
import com.graphhopper.util.PointList;
import com.graphhopper.util.shapes.GHPoint;
import com.graphhopper.util.shapes.GHPoint3D;
......@@ -38,9 +39,7 @@ import de.tudarmstadt.maki.simonstrator.api.Binder;
import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.Monitor.Level;
import java.util.HashMap;
import java.util.Locale;
import java.util.UUID;
import java.util.*;
/**
* This movement strategy uses the data from osm and navigates the nodes throught streets to the destination
......@@ -117,7 +116,6 @@ public class RealWorldStreetsMovement extends AbstractLocalMovementStrategy {
if(movementType == null || movementType.equals("") || !this.movementType.contains(movementType))
throw new AssertionError("Invalid movement type: " + movementType);
if(!init) init();
PositionVector newPosition = null;
if (destination.distanceTo(comp.getRealPosition()) > getMovementSpeed(comp))
......@@ -191,7 +189,6 @@ public class RealWorldStreetsMovement extends AbstractLocalMovementStrategy {
* @return The projected position in world-dimensions
*/
private PositionVector transformGPSWindowToOwnWorld(double lat, double lon) {
VisualizationTopologyView.VisualizationInjector.getWorldX();
double x = worldDimensions.getX() * (lon - lonLeft)/(lonRight - lonLeft);
double y = worldDimensions.getY() - worldDimensions.getY() * (lat - latLower)/(latUpper - latLower);
x = Math.max(0, x);
......@@ -200,6 +197,59 @@ public class RealWorldStreetsMovement extends AbstractLocalMovementStrategy {
y = Math.min(worldDimensions.getY(), y);
return new PositionVector(x, y);
}
/**
* Returns a list of points representing the current route of the component. Points are
* in x / y values of the own world.
* @param ms the component
* @return list of movement points.
*/
public List<PositionVector> getMovementPoints(SimLocationActuator ms)
{
List<PositionVector> positions = new LinkedList<>();
PointList pointList = movementPoints.get(ms).getPointList();
pointList.forEach(p -> positions.add(new PositionVector(transformGPSWindowToOwnWorld(p.getLat(), p.getLon()))));
return positions;
}
/**
* Calculates the length of a route in meters.
* @param start Starting position in own world coordinates (x / y)
* @param destination Destination on own world coordinates (x / y)
* @return the length of the route in meters.
*/
public double calculateRouteLength(PositionVector start, PositionVector destination)
{
PointList pointList;
double[] startPosition = transformOwnWorldWindowToGPS(start.getX(), start.getY());
double[] destinationPosition = transformOwnWorldWindowToGPS(destination.getX(), destination.getY());
GHRequest req = new GHRequest(startPosition[0], startPosition[1], destinationPosition[0], destinationPosition[1]).
setWeighting(navigationalType).
setVehicle(movementType).
setLocale(Locale.GERMANY);
GHResponse rsp = hopper.route(req);
//If the requested point is not in the map data, return -1
if(rsp.hasErrors()) {
return -1;
}
else {
pointList = rsp.getBest().getPoints();
return pointList.calcDistance(new DistanceCalc2D());
}
}
/**
* Calculates the length of the current route of the SimLocationActuator.
* @param ms the component
* @return the length of the current route
*/
public double getCurrentRouteLength(SimLocationActuator ms)
{
return movementPoints.get(ms).getPointList().calcDistance(new DistanceCalc2D());
}
public void setOsmFileLocation(String osmFileLocation) {
this.osmFileLocation = osmFileLocation;
......
......@@ -3,6 +3,7 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.movement.local.RealWorldMovementPoints;
import de.tud.kom.p2psim.impl.topology.movement.local.RealWorldStreetsMovement;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.transition.ITransitionStrategy;
import de.tud.kom.p2psim.impl.util.Either;
......@@ -13,6 +14,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
/**
* This class is meant to be used with the RealWorldStreetsMovement
......@@ -187,6 +189,22 @@ public class ModularMultiTypeMovementModel extends ModularMovementModel
Monitor.log(ModularMultiTypeMovementModel.class, Monitor.Level.DEBUG, String.format("Client %s changed his transition strategy from %s to %s", ms.getHost().getId().toString(), usedStrategy.getClass(), newStrategy.getClass()));
}
/**
* Returns a list of points representing the current route of the component. Points are
* in x / y values of the own world.
* @param ms the component
* @return list of movement points.
*/
public List<PositionVector> getMovementPoints(SimLocationActuator ms)
{
return ((RealWorldStreetsMovement) localMovementStrategy).getMovementPoints(ms);
}
public RealWorldStreetsMovement getMovementStrategy()
{
return (RealWorldStreetsMovement) localMovementStrategy;
}
/**
* Sets the default {@link ITransitionStrategy} for the specified {@link SimLocationActuator}.
* @param ms The SimLocationActuator
......
......@@ -3,7 +3,10 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
/**
* Created by Clemens on 13.03.2017.
* Listener for the {@link ModularMultiTypeMovementModel} to get
* informed about important changes in the movement.
*
* @author Clemens Krug
*/
public interface MultiTypeMovementListener
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment