From 2adf627e511d6eb0467b7467f9153dc059daf7ef Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 14 Mar 2016 20:30:51 -0300 Subject: [PATCH] Navitia: Also suggest POI and administrative locations The administrative areas are extremely useful when people search for a suburb, but no stops have the suburbs name. They are currently mapped to a POI location. --- .../pte/AbstractNavitiaProvider.java | 23 +++++++++++++++++-- .../live/AbstractNavitiaProviderLiveTest.java | 20 ++++++++++++++++ .../pte/live/ParisProviderLiveTest.java | 6 +++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java b/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java index 1b437310..35cace30 100644 --- a/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java @@ -211,7 +211,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider } case POI: { - return LocationType.ANY; + return LocationType.POI; } default: throw new IllegalArgumentException("Unhandled place type: " + placeType); @@ -257,6 +257,21 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider } } + private Location parseAdministrativeRegion(final JSONObject j) throws IOException + { + try + { + final JSONObject coord = j.getJSONObject("coord"); + final Point point = parseCoord(coord); + final String name = j.getString("name"); + return new Location(LocationType.POI, null, point, null, name); + } + catch (final JSONException jsonExc) + { + throw new ParserException(jsonExc); + } + } + private Location parseLocation(final JSONObject j) throws IOException { try @@ -287,6 +302,10 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider location = j.getJSONObject("poi"); break; } + case ADMINISTRATIVE_REGION: + { + return parseAdministrativeRegion(j.getJSONObject("administrative_region")); + } default: throw new IllegalArgumentException("Unhandled place type: " + type); } @@ -1029,7 +1048,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider { final String nameCstr = constraint.toString(); - final String queryUri = uri() + "places?q=" + ParserUtils.urlEncode(nameCstr) + "&type[]=stop_area&type[]=address" + "&depth=1"; + final String queryUri = uri() + "places?q=" + ParserUtils.urlEncode(nameCstr) + "&type[]=stop_area&type[]=address&type[]=poi&type[]=administrative_region" + "&depth=1"; final CharSequence page = httpClient.get(queryUri); try diff --git a/enabler/test/de/schildbach/pte/live/AbstractNavitiaProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/AbstractNavitiaProviderLiveTest.java index aebc8975..93fc681f 100644 --- a/enabler/test/de/schildbach/pte/live/AbstractNavitiaProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/AbstractNavitiaProviderLiveTest.java @@ -250,6 +250,26 @@ public abstract class AbstractNavitiaProviderLiveTest extends AbstractProviderLi print(result); } + protected final void queryTripFromAdminToPoi(final CharSequence from, final CharSequence to) throws IOException + { + final SuggestLocationsResult fromResult = suggestLocations(from); + assertTrue(fromResult.getLocations().size() > 0); + Location fromLocation = fromResult.getLocations().get(0); + assertEquals(fromLocation.type, LocationType.POI); + print(fromResult); + + final SuggestLocationsResult toResult = suggestLocations(to); + assertTrue(toResult.getLocations().size() > 0); + Location toLocation = toResult.getLocations().get(0); + assertEquals(toLocation.type, LocationType.POI); + print(toResult); + + final QueryTripsResult tripsResult = queryTrips(fromLocation, null, toLocation, new Date(), true, + Product.ALL, NetworkProvider.WalkSpeed.NORMAL, NetworkProvider.Accessibility.NEUTRAL); + assertEquals(QueryTripsResult.Status.OK, tripsResult.status); + print(tripsResult); + } + protected final void queryMoreTrips(final CharSequence from, final CharSequence to) throws IOException { final SuggestLocationsResult fromResult = suggestLocations(from); diff --git a/enabler/test/de/schildbach/pte/live/ParisProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/ParisProviderLiveTest.java index 09e6cfef..775822c8 100644 --- a/enabler/test/de/schildbach/pte/live/ParisProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/ParisProviderLiveTest.java @@ -154,6 +154,12 @@ public class ParisProviderLiveTest extends AbstractNavitiaProviderLiveTest queryTrip("Luxembourg Paris", "Antony Antony"); } + @Test + public void queryTripFromAdministrativeRegionToPoi() throws Exception + { + queryTripFromAdminToPoi("Paris 10e Arrondissement", "Paris Tour Eiffel"); + } + @Test public void queryTripNoSolution() throws Exception {