From 42f9c211459cc728de5474bc46d49df4182b51fc Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 8 Nov 2017 16:28:40 -0200 Subject: [PATCH] Navitia: Add house numbers to addresses. This commit adds the house number behind the street name if available and gives a way to define other formats like in France where the house number comes before the street name. --- .../pte/AbstractNavitiaProvider.java | 22 ++++++++++++++++++- .../pte/FranceNorthEastProvider.java | 5 +++++ .../pte/FranceNorthWestProvider.java | 5 +++++ .../pte/FranceSouthEastProvider.java | 5 +++++ .../pte/FranceSouthWestProvider.java | 5 +++++ .../src/de/schildbach/pte/ParisProvider.java | 6 +++++ 6 files changed, 47 insertions(+), 1 deletion(-) diff --git a/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java b/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java index 5f242193..f6ea91e6 100644 --- a/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java @@ -208,6 +208,19 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider { return name; } + /** + * Navitia always formats the address label in the French way. + * This method can be used to display addresses in a localized way. + * It defaults to putting the house number behind the street name. + * + * @param name The name of the address. Usually a street name. + * @param houseNumber The house number of the address. + * @return the localized name of the address location + */ + protected String getAddressName(final String name, final String houseNumber) { + return name + " " + houseNumber; + } + private Location parsePlace(JSONObject location, PlaceType placeType) throws IOException { try { final LocationType type = getLocationType(placeType); @@ -216,7 +229,14 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider { id = location.getString("id"); final JSONObject coord = location.getJSONObject("coord"); final Point point = parseCoord(coord); - final String name = getLocationName(location.getString("name")); + final String placeName = location.getString("name"); + String name; + if (placeType == PlaceType.ADDRESS) { + final String houseNumber = location.optString("house_number", "0"); + name = houseNumber.equals("0") ? getAddressName(placeName, houseNumber) : placeName; + } else { + name = getLocationName(placeName); + } String place = null; if (location.has("administrative_regions")) { JSONArray admin = location.getJSONArray("administrative_regions"); diff --git a/enabler/src/de/schildbach/pte/FranceNorthEastProvider.java b/enabler/src/de/schildbach/pte/FranceNorthEastProvider.java index 891a3a56..1ee1f4fb 100644 --- a/enabler/src/de/schildbach/pte/FranceNorthEastProvider.java +++ b/enabler/src/de/schildbach/pte/FranceNorthEastProvider.java @@ -75,4 +75,9 @@ public class FranceNorthEastProvider extends AbstractNavitiaProvider { throw new IllegalArgumentException("Unhandled product: " + product); } } + + @Override + protected String getAddressName(final String name, final String houseNumber) { + return houseNumber + " " + name; + } } diff --git a/enabler/src/de/schildbach/pte/FranceNorthWestProvider.java b/enabler/src/de/schildbach/pte/FranceNorthWestProvider.java index 017ce454..2250f2aa 100644 --- a/enabler/src/de/schildbach/pte/FranceNorthWestProvider.java +++ b/enabler/src/de/schildbach/pte/FranceNorthWestProvider.java @@ -41,4 +41,9 @@ public class FranceNorthWestProvider extends AbstractNavitiaProvider { public String region() { return API_REGION; } + + @Override + protected String getAddressName(final String name, final String houseNumber) { + return houseNumber + " " + name; + } } diff --git a/enabler/src/de/schildbach/pte/FranceSouthEastProvider.java b/enabler/src/de/schildbach/pte/FranceSouthEastProvider.java index 394db041..9473c553 100644 --- a/enabler/src/de/schildbach/pte/FranceSouthEastProvider.java +++ b/enabler/src/de/schildbach/pte/FranceSouthEastProvider.java @@ -76,4 +76,9 @@ public class FranceSouthEastProvider extends AbstractNavitiaProvider { return super.getLineStyle(network, product, code, color); } } + + @Override + protected String getAddressName(final String name, final String houseNumber) { + return houseNumber + " " + name; + } } diff --git a/enabler/src/de/schildbach/pte/FranceSouthWestProvider.java b/enabler/src/de/schildbach/pte/FranceSouthWestProvider.java index 46f600bd..10016e42 100644 --- a/enabler/src/de/schildbach/pte/FranceSouthWestProvider.java +++ b/enabler/src/de/schildbach/pte/FranceSouthWestProvider.java @@ -76,4 +76,9 @@ public class FranceSouthWestProvider extends AbstractNavitiaProvider { return super.getLineStyle(network, product, code, color); } } + + @Override + protected String getAddressName(final String name, final String houseNumber) { + return houseNumber + " " + name; + } } diff --git a/enabler/src/de/schildbach/pte/ParisProvider.java b/enabler/src/de/schildbach/pte/ParisProvider.java index efc7bf74..6bc406d4 100644 --- a/enabler/src/de/schildbach/pte/ParisProvider.java +++ b/enabler/src/de/schildbach/pte/ParisProvider.java @@ -89,4 +89,10 @@ public class ParisProvider extends AbstractNavitiaProvider { protected String getLocationName(String name) { return WordUtils.capitalizeFully(name); } + + @Override + protected String getAddressName(final String name, final String houseNumber) { + return houseNumber + " " + name; + } + }