Android Geocoder class, missing Town and Postcode - android

I have problem with geocoding on android device.
Geocoder c = new Geocoder(this, Locale.getDefault());
List<Address> l = c.getFromLocation(lat, lon, 1);
for (Address a: l) {
Log.i("GeocoderResult", "Locality " + a.getLocality() + " poscode " + a.getPostcode());
}
The Android Geocoder returns the android.location.Address object. The text returned can have city and postcode in it, but corresponding object fields may still be empty.
Geocoding with town and postcode in the text, but not in the object fields:
50.74967518;-1.99207054:
Address text: "17 Gough Crescent, Poole, BH17, GB"
locality = null
postcode = null
Address[addressLines=[0:"17 Gough Crescent",1:"Poole",2:"BH17",3:"UK"],feature=17,admin=Poole,sub-admin=Poole,locality=null,thoroughfare=Gough Crescent,postalCode=null,countryCode=GB,countryName=United Kingdom,hasLatitude=true,latitude=50.7498262,hasLongitude=true,longitude=-1.992054,phone=null,url=null,extras=null]
Geocoding with town and postcode both in the text and in the object fields:
50.74966423;-1.99205967
Address text: 2-6 Gough Crescent, Poole BH17, GB
locality = Poole
postalCode=BH17
Address[addressLines=[0:"2-6 Gough Crescent",1:"Poole BH17",2:"UK"],feature=2-6,admin=null,sub-admin=null,locality=Poole,thoroughfare=Gough Crescent,postalCode=BH17,countryCode=GB,countryName=United Kingdom,hasLatitude=true,latitude=50.7496887,hasLongitude=true,longitude=-1.9917892,phone=null,url=null,extras=null]
Are we missing something and something can be done to retrieve the missing town and postcode data using just Android Geocoder as is? Or is the only way to do this guessing which of the fields is likely to contain town data if the 'locality' is empty and trying to parse address text for postcode?

Related

How can I get values from address of Place Picker?

I want to get values from address of Place Picker in android and separate it into different EditText like I want to set pincode on PineCodeEditText, set country on CountryEditText, set State on StateEditText and so on. I have got address as
10, Mothorowala Rd, Jagdamba Colony, Dharmpur, Ajabpur Kalan,
Dehradun, Uttarakhand 248001, India
Where I used
Place place = PlacePicker.getPlace(data,this);
String address = String.format(String.valueOf(place.getAddress()));
Before this I used Split function but it gives indexOutOfBoundException.
Any suggestion please welcome, Thank You.
You can get the latitude and longitude coordinates from the Place object, then get the address object using the GeoCoder, which you can use to get the required data separately.
LatLng coordinates = place.getLatLng(); // Get the coordinates from your place
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(
coordinates.latitude,
coordinates.longitude,
1); // Only retrieve 1 address
Address address = addresses.get(0);
String countryCode = address.getCountryCode();
String countryName = address.getCountryName();

Geocoder APIs returning range of addresses

I am attempting to use latitude and longitude coordinates to resolve a specific address. Currently, the Geocoder APIs will occasionally return a range of addresses, even if the selected location is an individual house rather than something like an apartment building.
The below method accepts a latitude, longitude, and Activity and returns the Address object returned from the Geocoder API:
public static Address resolveAddress(double latitude, double longitude, Activity activity) {
Geocoder geocoder = new Geocoder(activity);
List<Address> addresses;
try {
addresses = geocoder.getFromLocation(latitude, longitude, 1);
if (addresses != null && addresses.size() > 0 ) {
Log.d(TAG, "resolveAddress: " + addresses.get(0).toString());
return addresses.get(0);
}
} catch (IOException e) {
Log.e(TAG, e.getMessage(), e);
}
return null;
}
The getFromLocation() method provided by the Geocoder API accepts a maxResults parameter as it's last argument, which you can see in the above code is set to 1. Even so, while only a single result is returned, a range of street numbers is returned in the single result.
I would assume that GPS and the Android Location service is accurate enough to resolve to a single house. How can I use latitude and longitude coordinates to best determine a single address?

Reverse Geocoding issue

I implemented the reverse geocoding in my app and it is working, but sometimes it happens a very strange issue.
The code is that
List<Address> addresses = geo.getFromLocation(
obj.getLatitude(), obj.getLongitude(), 1);
List<Address> address = geo.getFromLocationName( addresses.get(0).getLocality().getBytes() , 1 );
Address location = address.get(0);
In the first part I get the address object of the place in which I'm. Than I want recover the generic coordinates of the city in where I'm because I don't want store the coordinates of my exact position.
This is working but I encounter a very strange issue! Trying the app with the fakegps app I set my position in "Ñuñoa", and the first address was found correctly, but when I try to get the generic coordinates, I get "Nunoa" that isn't in Chile, but in Peru!!
That makes no sense! why this?
Thanks for helping me
Sure Swathi.
List<Address> addresses = geo.getFromLocation(msg_r.getLatitude(),
msg_r.getLongitude(), 1);
String geoL = addresses.get(0).getLocality() + ", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryCode();
// reverse-reverseGeocoding
List<Address> address = geo.getFromLocationName(geoL, 1);
System.out.println("Where I am? " + geoL);
Address location = address.get(0);
// generic coordinate for the locality/city/town
location.getLatitude();
location.getLongitude();

Android getFromLocationName return results outside the bounding box

I am doing a location search from my android app. User enter an address and I do a lookup with the following code,
private void doSearch(String query){
FNMApplication.logInfo("Searching:"+query);
//create a geocoder
Geocoder gc = new Geocoder(this,Locale.getDefault());
try{
//lookup locations which match the query input by the user
List<Address> addresses = gc.getFromLocationName(query, 5, -44.00, 111.00, -12.0, 155.0);
//if there are any results save them in an ivar for re-use
locationSearchResults=addresses;
promptSearch();
}
catch (Exception e){
;
}
}
The bounding box above is for australia but if I search for "Los Angelos" it returns results in the US. Is there something I have missed? As I see it, it should only return addresses within the bounding box as per the reference document
From the Question I tried this and the results I got are shown below.
18.55, 72.54 = Mumbai
22.18, 70.56 = Rajkot
1)
When I pass lower latitude vaue as left lower and search for the string I got this
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocationName("akshardham", 5,
18.55, 72.54, 22.18, 70.56);
Log.i("Address", "=========0----------------------"
+ addresses.get(0).getAddressLine(0)
+ addresses.get(0).getAddressLine(1));
Log.i("Address", "=========0----------------------"
+ addresses.get(1).getAddressLine(0)
+ addresses.get(1).getAddressLine(1));
Log.i("Address", "=========0----------------------"
+ addresses.get(2).getAddressLine(0));
Log.i("Address", "=========0----------------------"
+ addresses.get(3).getAddressLine(0));
Log.i("Address", "=========0----------------------"
+ addresses.get(4).getAddressLine(0));
} catch (Exception e) {
;
}
Logcat of this
11-17 12:42:32.419: INFO/Address(802): =========0----------------------AkshardhamNH 8C, Sector 20
11-17 12:42:32.429: INFO/Address(802): =========0----------------------AkshardhamRajkot, Gujarat 360005
11-17 12:42:32.429: INFO/Address(802): =========0----------------------Akshardham
2)
When I pass higher latitude vaue as left lower and search for the string I got this
List<Address> addresses = gc.getFromLocationName("akshardham",5, 22.18, 70.56,18.55, 72.54 );
Logcat of this
11-17 12:43:53.170: INFO/Address(837): =========0----------------------HardhamPulborough, West Sussex RH20 1
3)
The doc here itself says "The addresses matching inside the bounding box is given higher rank." , I think they mean to say, Its not necessary that If search string is address between this box only will be return,if they found the address they will return even if its out of bounding box.
I Suppose;Bounding Box is just for setting the priority of result while getting means result from the box wil be first and and then other like in get(0),get(1) of the list. but the result will be given even if they are not in bounding box.
4)
In the Geocoder.java here they are just calling the method to get addresses with passing double values as argument simple..no any checking for the result is used there else to check the lowest and highest value
=> So final answer to you problem you just call the function as you are calling and you can check the second address line that does they matches to yours means the state or country is same. to find the country,state name of your bounding box value use getFromLocation(latitude, longitude, maxResults), I still Didn't Find A Perfect Solution For this,So me too Searching
=> More on this can be explained by an expert (That's I am not) or Developer from Google itself.

returning null when implementing Geocoder

I'm trying to find the address(location) using Geocoder.
I have the following code:
double lat = (double) (coord.getLat() * (1e-6));
double lon = (double) (coord.getLon() * (1e-6));
try {
List<Address> list = geocoder.getFromLocation(lat, lon,1);
if (list != null && list.size() > 0) {
Address address = list.get(0);
result = address.getAddressLine(0) + ", "
+ address.getLocality();
}
System.out.println("adresa returnata folosind geocoder:"
+ result);
}
The data that I pass to geocoder is in this format:
2.449548
48.950518
But when trying to println() the first address returned by Geocoder it returns null. This is how my logcat looks like:
reverseGeocode()`: no feature in
GLocation
And my System.out.println() displays :null. I have internet acces and also internet permssion added to my manifest file. Does someone know what I'm doing wrong??
As Geobits said, your coordinates belong to place in the Arabian Sea. You cant get an Address from there, so your list is empty and your result is null.

Categories

Resources