also query nearby stations when querying equivs

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@495 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach@gmail.com 2011-02-12 16:43:57 +00:00
parent 494611ad16
commit f8e4a27225

View file

@ -840,8 +840,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures, final boolean equivs) throws IOException public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures, final boolean equivs) throws IOException
{ {
final String uri = departuresQueryUri(stationId, maxDepartures) + "&outputFormat=XML&coordOutputFormat=WGS84&deleteAssignedStops_dm=" final String uri = departuresQueryUri(stationId, maxDepartures) + "&outputFormat=XML&coordOutputFormat=WGS84&mode=direct"
+ (equivs ? '0' : '1') + "&mode=direct"; + (equivs ? "&useProxFootSearch=1&ptOptionsActive=1" : "&deleteAssignedStops_dm=1");
InputStream is = null; InputStream is = null;
try try
@ -854,12 +854,18 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.enter(pp, "itdRequest"); XmlPullUtil.enter(pp, "itdRequest");
if (XmlPullUtil.test(pp, "clientHeaderLines"))
XmlPullUtil.next(pp);
if (XmlPullUtil.test(pp, "serverMetaInfo")) if (XmlPullUtil.test(pp, "serverMetaInfo"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
if (XmlPullUtil.test(pp, "itdVersionInfo")) if (XmlPullUtil.test(pp, "itdVersionInfo"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
if (XmlPullUtil.test(pp, "itdInfoLinkList"))
XmlPullUtil.next(pp);
XmlPullUtil.enter(pp, "itdDepartureMonitorRequest"); XmlPullUtil.enter(pp, "itdDepartureMonitorRequest");
if (!XmlPullUtil.test(pp, "itdOdv") || !"dm".equals(XmlPullUtil.attr(pp, "usage"))) if (!XmlPullUtil.test(pp, "itdOdv") || !"dm".equals(XmlPullUtil.attr(pp, "usage")))
@ -918,7 +924,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.enter(pp, "itdServingLines"); XmlPullUtil.enter(pp, "itdServingLines");
while (XmlPullUtil.test(pp, "itdServingLine")) while (XmlPullUtil.test(pp, "itdServingLine"))
{ {
final String assignedStopId = pp.getAttributeValue(null, "assignedStopID"); final String assignedStopIdStr = pp.getAttributeValue(null, "assignedStopID");
final int assignedStopId = assignedStopIdStr != null ? Integer.parseInt(assignedStopIdStr) : 0;
final String destination = normalizeLocationName(pp.getAttributeValue(null, "direction")); final String destination = normalizeLocationName(pp.getAttributeValue(null, "direction"));
final String destinationIdStr = pp.getAttributeValue(null, "destID"); final String destinationIdStr = pp.getAttributeValue(null, "destID");
final int destinationId = destinationIdStr.length() > 0 ? Integer.parseInt(destinationIdStr) : 0; final int destinationId = destinationIdStr.length() > 0 ? Integer.parseInt(destinationIdStr) : 0;
@ -926,14 +933,18 @@ public abstract class AbstractEfaProvider implements NetworkProvider
final String lineStr = processItdServingLine(pp); final String lineStr = processItdServingLine(pp);
final Line line = new Line(lineStr, lineColors(lineStr), destinationId, destination); final Line line = new Line(lineStr, lineColors(lineStr), destinationId, destination);
final List<Line> lines; StationDepartures assignedStationDepartures;
if (assignedStopId == null) if (assignedStopId == 0)
lines = result.stationDepartures.get(0).lines; assignedStationDepartures = result.stationDepartures.get(0);
else else
lines = findStationDepartures(result.stationDepartures, Integer.parseInt(assignedStopId)).lines; assignedStationDepartures = findStationDepartures(result.stationDepartures, assignedStopId);
if (!lines.contains(line)) if (assignedStationDepartures == null)
lines.add(line); assignedStationDepartures = new StationDepartures(new Location(LocationType.STATION, assignedStopId),
new LinkedList<Departure>(), new LinkedList<Line>());
if (!assignedStationDepartures.lines.contains(line))
assignedStationDepartures.lines.add(line);
} }
XmlPullUtil.exit(pp, "itdServingLines"); XmlPullUtil.exit(pp, "itdServingLines");
} }
@ -948,7 +959,21 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.enter(pp, "itdDepartureList"); XmlPullUtil.enter(pp, "itdDepartureList");
while (XmlPullUtil.test(pp, "itdDeparture")) while (XmlPullUtil.test(pp, "itdDeparture"))
{ {
final int stopId = XmlPullUtil.intAttr(pp, "stopID"); final int assignedStopId = XmlPullUtil.intAttr(pp, "stopID");
StationDepartures assignedStationDepartures = findStationDepartures(result.stationDepartures, assignedStopId);
if (assignedStationDepartures == null)
{
final String mapName = pp.getAttributeValue(null, "mapName");
if (mapName == null || !"WGS84".equals(mapName))
throw new IllegalStateException("unknown mapName: " + mapName);
final int lon = XmlPullUtil.intAttr(pp, "x");
final int lat = XmlPullUtil.intAttr(pp, "y");
// final String name = normalizeLocationName(XmlPullUtil.attr(pp, "nameWO"));
assignedStationDepartures = new StationDepartures(new Location(LocationType.STATION, assignedStopId, lat, lon),
new LinkedList<Departure>(), new LinkedList<Line>());
}
final String position = normalizePlatform(pp.getAttributeValue(null, "platform"), pp.getAttributeValue(null, "platformName")); final String position = normalizePlatform(pp.getAttributeValue(null, "platform"), pp.getAttributeValue(null, "platformName"));
@ -975,10 +1000,10 @@ public abstract class AbstractEfaProvider implements NetworkProvider
if (isRealtime && !predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY)) if (isRealtime && !predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY))
predictedDepartureTime.setTimeInMillis(plannedDepartureTime.getTimeInMillis()); predictedDepartureTime.setTimeInMillis(plannedDepartureTime.getTimeInMillis());
final List<Departure> departures = findStationDepartures(result.stationDepartures, stopId).departures; final Departure departure = new Departure(plannedDepartureTime.getTime(),
departures.add(new Departure(plannedDepartureTime.getTime(),
predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY) ? predictedDepartureTime.getTime() : null, line, lineColors(line), predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY) ? predictedDepartureTime.getTime() : null, line, lineColors(line),
null, position, destinationId, destination, null)); null, position, destinationId, destination, null);
assignedStationDepartures.departures.add(departure);
XmlPullUtil.exit(pp, "itdDeparture"); XmlPullUtil.exit(pp, "itdDeparture");
} }