From 91bf6a0199cd27553b52a1d09bed8b4522c98045 Mon Sep 17 00:00:00 2001 From: "andreas.schildbach@gmail.com" Date: Sat, 7 May 2011 13:42:24 +0000 Subject: [PATCH] nearby stations by coordinate for Germany git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@616 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- src/de/schildbach/pte/BahnProvider.java | 55 +++++++++++-------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 61dc0995..c740ea94 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -73,8 +73,6 @@ public final class BahnProvider extends AbstractHafasProvider return jsonGetStops(uri); } - private final static Pattern P_NEARBY_STATIONS_BY_COORDINATE = Pattern - .compile("(.+?)"); private final static Pattern P_NEARBY_STATIONS_BY_STATION = Pattern .compile("([^<]*)"); @@ -88,14 +86,29 @@ public final class BahnProvider extends AbstractHafasProvider public NearbyStationsResult nearbyStations(final String stationId, final int lat, final int lon, final int maxDistance, final int maxStations) throws IOException { - final List stations = new ArrayList(); + final StringBuilder uri = new StringBuilder(API_BASE); - if (lat == 0 && lon == 0) + if (lat != 0 || lon != 0) { - final String uri = API_BASE + "bhftafel.exe/dn?near=Anzeigen&distance=50&input=" + ParserUtils.urlEncode(stationId); - final CharSequence page = ParserUtils.scrape(uri); + uri.append("query.exe/dny"); + uri.append("?performLocating=2&tpl=stop2json"); + uri.append("&look_maxno=").append(maxStations != 0 ? maxStations : 200); + uri.append("&look_maxdist=").append(maxDistance != 0 ? maxDistance : 5000); + uri.append("&look_stopclass=").append(allProductsInt()); + uri.append("&look_x=").append(lon); + uri.append("&look_y=").append(lat); + + return jsonNearbyStations(uri.toString()); + } + else + { + uri.append("bhftafel.exe/dn?near=Anzeigen&distance=50&input=").append(ParserUtils.urlEncode(stationId)); + + final CharSequence page = ParserUtils.scrape(uri.toString()); final Matcher m = P_NEARBY_STATIONS_BY_STATION.matcher(page); + + final List stations = new ArrayList(); while (m.find()) { final int sId = Integer.parseInt(m.group(1)); @@ -104,32 +117,12 @@ public final class BahnProvider extends AbstractHafasProvider final Location station = new Location(LocationType.STATION, sId, null, sName); stations.add(station); } + + if (maxStations == 0 || maxStations >= stations.size()) + return new NearbyStationsResult(stations); + else + return new NearbyStationsResult(stations.subList(0, maxStations)); } - else - { - final String uri = API_BASE + "query.exe/dox" + "?performLocating=2&tpl=stopsnear&look_maxdist=" + (maxDistance > 0 ? maxDistance : 5000) - + "&look_stopclass=" + allProductsInt() + "&look_x=" + lon + "&look_y=" + lat; - System.out.println(uri); - final CharSequence page = ParserUtils.scrape(uri); - - final Matcher m = P_NEARBY_STATIONS_BY_COORDINATE.matcher(page); - while (m.find()) - { - final int sId = Integer.parseInt(m.group(3)); - - final int sLon = Integer.parseInt(m.group(1)); - final int sLat = Integer.parseInt(m.group(2)); - final String sName = ParserUtils.resolveEntities(m.group(5).trim()); - - final Location station = new Location(LocationType.STATION, sId, sLat, sLon, null, sName); - stations.add(station); - } - } - - if (maxStations == 0 || maxStations >= stations.size()) - return new NearbyStationsResult(stations); - else - return new NearbyStationsResult(stations.subList(0, maxStations)); } private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep,