From 373c02546f173a966a9aed1b49486201ed340634 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 7 Dec 2013 11:14:35 +0100 Subject: [PATCH] Parse itdCoordinateBaseElemList where itdCoordinateString is not available --- .../schildbach/pte/AbstractEfaProvider.java | 50 +++++++++++++++++-- .../src/de/schildbach/pte/VvoProvider.java | 1 + 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index f628c279..78ce2a71 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -105,6 +105,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider private boolean httpPost = false; private boolean useRouteIndexAsTripId = true; private boolean useLineRestriction = true; + private boolean useStringCoordListOutputFormat = true; private float fareCorrectionFactor = 1f; private final XmlPullParserFactory parserFactory; @@ -213,6 +214,11 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider this.useLineRestriction = useLineRestriction; } + protected void setUseStringCoordListOutputFormat(final boolean useStringCoordListOutputFormat) + { + this.useStringCoordListOutputFormat = useStringCoordListOutputFormat; + } + protected void setCanAcceptPoiId(final boolean canAcceptPoiId) { this.canAcceptPoiId = canAcceptPoiId; @@ -581,7 +587,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final StringBuilder parameters = new StringBuilder(); appendCommonRequestParams(parameters, "XML"); parameters.append("&coord=").append(String.format(Locale.ENGLISH, "%2.6f:%2.6f:WGS84", latLonToDouble(lon), latLonToDouble(lat))); - parameters.append("&coordListOutputFormat=STRING"); + if (useStringCoordListOutputFormat) + parameters.append("&coordListOutputFormat=STRING"); parameters.append("&max=").append(maxStations != 0 ? maxStations : 50); parameters.append("&inclFilter=1&radius_1=").append(maxDistance != 0 ? maxDistance : 1320); parameters.append("&type_1=STOP"); // ENTRANCE, BUS_POINT, POI_POINT @@ -2096,9 +2103,10 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider return uri.toString(); } - private static final void appendCommonXsltTripRequest2Params(final StringBuilder uri) + private final void appendCommonXsltTripRequest2Params(final StringBuilder uri) { - uri.append("&coordListOutputFormat=STRING"); + if (useStringCoordListOutputFormat) + uri.append("&coordListOutputFormat=STRING"); uri.append("&calcNumberOfTrips=4"); } @@ -3068,7 +3076,19 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider if (!"GEO_DECIMAL".equals(type)) throw new IllegalStateException("unknown type: " + type); - final List path = processCoordinateStrings(pp, "itdCoordinateString"); + final List path; + if (XmlPullUtil.test(pp, "itdCoordinateString")) + { + path = processCoordinateStrings(pp, "itdCoordinateString"); + } + else if (XmlPullUtil.test(pp, "itdCoordinateBaseElemList")) + { + path = processCoordinateBaseElems(pp); + } + else + { + throw new IllegalStateException(pp.getPositionDescription()); + } XmlPullUtil.exit(pp, "itdPathCoordinates"); @@ -3086,6 +3106,28 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider return path; } + private List processCoordinateBaseElems(final XmlPullParser pp) throws XmlPullParserException, IOException + { + final List path = new LinkedList(); + + XmlPullUtil.enter(pp, "itdCoordinateBaseElemList"); + + while (XmlPullUtil.test(pp, "itdCoordinateBaseElem")) + { + XmlPullUtil.enter(pp, "itdCoordinateBaseElem"); + + final int lon = Math.round(Float.parseFloat(requireValueTag(pp, "x"))); + final int lat = Math.round(Float.parseFloat(requireValueTag(pp, "y"))); + path.add(new Point(lat, lon)); + + XmlPullUtil.exit(pp, "itdCoordinateBaseElem"); + } + + XmlPullUtil.exit(pp, "itdCoordinateBaseElemList"); + + return path; + } + private Point coordStrToPoint(final String coordStr) { if (coordStr == null) diff --git a/enabler/src/de/schildbach/pte/VvoProvider.java b/enabler/src/de/schildbach/pte/VvoProvider.java index 4ebaa6f1..32db6c42 100644 --- a/enabler/src/de/schildbach/pte/VvoProvider.java +++ b/enabler/src/de/schildbach/pte/VvoProvider.java @@ -41,6 +41,7 @@ public class VvoProvider extends AbstractEfaProvider super(apiBase); setUseRealtime(false); + setUseStringCoordListOutputFormat(false); setRequestUrlEncoding(UTF_8); }