Get location(Latitude and Longitude) from described address using Geocoder

The method getFromLocationName(String locationName, int maxResults) returns an array of Addresses that are known to describe the named location.

The query will block and returned values will be obtained by means of a network lookup. The results are a best guess and are not guaranteed to be meaningful or correct. It may be useful to call this method from a thread separate from your primary UI thread.

Modify the last exercise "Get list of address from location using Geocoder", the returned address of the clicked item is passed to getFromLocationName(), to get the location(Latitude and Longitude).

Suggest to test on true device. In my tests, it doesn't always work on emulator!


Get location(Latitude and Longitude) from described address using Geocoder


android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Location"
android:background="#505050"
/>
android:id="@+id/mylatitude"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:id="@+id/mylongitude"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Address"
android:background="#505050"
/>
android:id="@+id/myaddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:id="@+id/addresslist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Returned Address"
android:background="#505050"
/>
android:id="@+id/returnedaddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:id="@+id/returnedlatitude"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:id="@+id/returnedlongitude"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>


package com.exercise.AndroidFromLocation;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class AndroidFromLocation extends Activity {

double LATITUDE = 37.42233;
double LONGITUDE = -122.083;

final int maxResult =5;
String addressList[] = new String[maxResult];
private ArrayAdapter adapter;

TextView myReturnedAddress, myReturnedLatitude, myReturnedLongitude;

Geocoder geocoder;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView myLatitude = (TextView)findViewById(R.id.mylatitude);
TextView myLongitude = (TextView)findViewById(R.id.mylongitude);
TextView myAddress = (TextView)findViewById(R.id.myaddress);
Spinner myAddressList = (Spinner)findViewById(R.id.addresslist);
myReturnedAddress = (TextView)findViewById(R.id.returnedaddress);
myReturnedLatitude = (TextView)findViewById(R.id.returnedlatitude);
myReturnedLongitude = (TextView)findViewById(R.id.returnedlongitude);

myLatitude.setText("Latitude: " + String.valueOf(LATITUDE));
myLongitude.setText("Longitude: " + String.valueOf(LONGITUDE));

geocoder = new Geocoder(this, Locale.ENGLISH);

try {
List
addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, maxResult);

if(addresses != null) {

for (int j=0; j Address returnedAddress = addresses.get(j);
StringBuilder strReturnedAddress = new StringBuilder();
for(int i=0; i strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
addressList[j] = strReturnedAddress.toString();
}

adapter = new ArrayAdapter(this,
android.R.layout.simple_spinner_item, addressList);
adapter.setDropDownViewResource(android.R.layout.
simple_spinner_dropdown_item);
myAddressList.setAdapter(adapter);

myAddressList.setOnItemSelectedListener(myAddressListOnItemSelectedListener);
}
else{
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Canont get Address!");
}
}

Spinner.OnItemSelectedListener myAddressListOnItemSelectedListener
= new Spinner.OnItemSelectedListener(){

@Override
public void onItemSelected(AdapterView arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub

myReturnedAddress.setText(addressList[arg2]);

try {
List
returnedaddresses = geocoder.getFromLocationName(addressList[arg2], 1);

if(returnedaddresses != null){
myReturnedLatitude.setText(String.valueOf(returnedaddresses.get(0).getLatitude()));
myReturnedLongitude.setText(String.valueOf(returnedaddresses.get(0).getLongitude()));
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void onNothingSelected(AdapterView arg0) {
// TODO Auto-generated method stub

}};
}


Download the files.

Updated@20150916:
Find addresses of given latitude and longitude using android.location.Geocoder
Example allow users to enter latitude and longitude, then find the addresses that are known to describe the area immediately surrounding the given latitude and longitude,

Post a Comment

Previous Post Next Post

Contact Form