more individual leg types

This commit is contained in:
Andreas Schildbach 2013-06-12 19:34:30 +02:00
parent 2852aedbd5
commit 3aab4006d5
4 changed files with 40 additions and 22 deletions

View file

@ -1938,7 +1938,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
if ("IT".equals(partialRouteType) || "Fussweg".equals(productName) || "Taxi".equals(productName))
{
final int min = (int) (arrivalTime.getTime() - departureTime.getTime()) / 1000 / 60;
final boolean transfer = "Taxi".equals(productName);
final Trip.Individual.Type type = "Taxi".equals(productName) ? Trip.Individual.Type.TRANSFER : Trip.Individual.Type.WALK;
XmlPullUtil.enter(pp, "itdMeansOfTransport");
XmlPullUtil.exit(pp, "itdMeansOfTransport");
@ -1953,17 +1953,17 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
if (XmlPullUtil.test(pp, "itdPathCoordinates"))
path = processItdPathCoordinates(pp);
if (legs.size() > 0 && legs.get(legs.size() - 1) instanceof Trip.Individual)
final Trip.Leg lastLeg = legs.size() > 0 ? legs.get(legs.size() - 1) : null;
if (lastLeg != null && lastLeg instanceof Trip.Individual && ((Trip.Individual) lastLeg).type == type)
{
final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1);
if (path != null && lastIndividualLeg.path != null)
path.addAll(0, lastIndividualLeg.path);
legs.add(new Trip.Individual(lastIndividualLeg.min + min, distance, lastIndividualLeg.transfer || transfer,
lastIndividualLeg.departure, arrivalLocation, path));
final Trip.Individual lastIndividual = (Trip.Individual) legs.remove(legs.size() - 1);
if (path != null && lastIndividual.path != null)
path.addAll(0, lastIndividual.path);
legs.add(new Trip.Individual(lastIndividual.min + min, distance, type, lastIndividual.departure, arrivalLocation, path));
}
else
{
legs.add(new Trip.Individual(min, distance, transfer, departureLocation, arrivalLocation, path));
legs.add(new Trip.Individual(min, distance, type, departureLocation, arrivalLocation, path));
}
}
else if ("gesicherter Anschluss".equals(productName) || "nicht umsteigen".equals(productName)) // type97

View file

@ -1322,12 +1322,12 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
if (legs.size() > 0 && legs.get(legs.size() - 1) instanceof Trip.Individual)
{
final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1);
legs.add(new Trip.Individual(lastIndividualLeg.min + min, 0, false, lastIndividualLeg.departure, sectionArrivalLocation,
null));
legs.add(new Trip.Individual(lastIndividualLeg.min + min, 0, Trip.Individual.Type.WALK, lastIndividualLeg.departure,
sectionArrivalLocation, null));
}
else
{
legs.add(new Trip.Individual(min, 0, false, sectionDepartureLocation, sectionArrivalLocation, null));
legs.add(new Trip.Individual(min, 0, Trip.Individual.Type.WALK, sectionDepartureLocation, sectionArrivalLocation, null));
}
}
}
@ -1811,6 +1811,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
int lineClass = 0;
String lineCategory = null;
String lineOperator = null;
String routingType = null;
while (true)
{
final String key = strings.read(is);
@ -1824,6 +1825,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
lineCategory = strings.read(is);
else if (key.equals("Operator"))
lineOperator = strings.read(is);
else if (key.equals("GisRoutingType"))
routingType = strings.read(is);
else
is.skipBytes(2);
}
@ -1898,17 +1901,28 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
if (type == 1 /* Fussweg */|| type == 3 /* Uebergang */|| type == 4 /* Uebergang */)
{
final int min = (int) ((plannedArrivalTime - plannedDepartureTime) / 1000 / 60);
final boolean transfer = type != 1;
final Trip.Individual.Type individualType;
if (routingType == null)
individualType = type == 1 ? Trip.Individual.Type.WALK : Trip.Individual.Type.TRANSFER;
else if ("FOOT".equals(routingType))
individualType = Trip.Individual.Type.WALK;
else if ("BIKE".equals(routingType))
individualType = Trip.Individual.Type.BIKE;
else if ("P+R".equals(routingType))
individualType = Trip.Individual.Type.CAR;
else
throw new IllegalStateException("unknown routingType: " + routingType);
if (legs.size() > 0 && legs.get(legs.size() - 1) instanceof Trip.Individual)
final Trip.Leg lastLeg = legs.size() > 0 ? legs.get(legs.size() - 1) : null;
if (lastLeg != null && lastLeg instanceof Trip.Individual && ((Trip.Individual) lastLeg).type == individualType)
{
final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1);
leg = new Trip.Individual(lastIndividualLeg.min + min, 0, lastIndividualLeg.transfer || transfer,
lastIndividualLeg.departure, arrivalLocation, null);
leg = new Trip.Individual(lastIndividualLeg.min + min, 0, individualType, lastIndividualLeg.departure,
arrivalLocation, null);
}
else
{
leg = new Trip.Individual(min, 0, transfer, departureLocation, arrivalLocation, null);
leg = new Trip.Individual(min, 0, individualType, departureLocation, arrivalLocation, null);
}
}
else if (type == 2)

View file

@ -416,7 +416,7 @@ public class SadProvider extends AbstractNetworkProvider {
// Add footway to legs list
if (isFootway) {
// NOTE: path is set to null
legs.add(new Trip.Individual(Integer.parseInt(tratto.getPropertyAsString("durata").split(":")[1]), 0, false,
legs.add(new Trip.Individual(Integer.parseInt(tratto.getPropertyAsString("durata").split(":")[1]), 0, Trip.Individual.Type.WALK,
soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), soapToLocation((SoapObject) tratto
.getProperty("nodo_arrivo")), null));
}

View file

@ -327,16 +327,20 @@ public final class Trip implements Serializable
public final int min;
public final int distance;
public final boolean transfer;
public final Type type;
public Individual(final int min, final int distance, final boolean transfer, final Location departure, final Location arrival,
final List<Point> path)
public enum Type
{
WALK, BIKE, CAR, TRANSFER
}
public Individual(final int min, final int distance, final Type type, final Location departure, final Location arrival, final List<Point> path)
{
super(departure, arrival, path);
this.min = min;
this.distance = distance;
this.transfer = transfer;
this.type = type;
}
@Override
@ -347,7 +351,7 @@ public final class Trip implements Serializable
builder.append(",");
builder.append("distance=").append(distance);
builder.append(",");
builder.append("transfer=").append(transfer);
builder.append("type=").append(type);
builder.append(",");
builder.append("departure=").append(departure.toDebugString());
builder.append(",");