I have this method to show the user's latitude and longitude on a map activity:
public void animateMap(Location location){
double lat = location.getLatitude();
double lng = location.getLongitude();
Toast.makeText(MyMapActivity.this,
"Sie sind an\n" + lat + "\n" + lng, Toast.LENGTH_SHORT)
.show();
GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
mapController.animateTo(point, new Message());
mapOverlay.setPointToDraw(point);
}
How to implement the Geocoder on my method? So the Toast will display the location's address instead of the coordinates
you use
Geocoder myLocation = new Geocoder(context, Locale.ENGLISH);
List<Address> myList= myLocation.getFromLocation(lat, lng, 1);
Address add = myList.get(0);
String addressString = add.getAddressLine(0);
String country = add.getCountryName();
String city = add.getLocality();
The easiest implementation is by using the geocoder class:
Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
geocoder.getFromLocation(lat, lng, 1);
List<Address> ls=new ArrayList();
ls= geocoder.getFromLocation(lat, lng, 1);
String myLocation = ls.get(0).getSubAdminArea();
You can check all the information returned by this class and choose which one fits you most. It contains from country names to landmarks name, neighbors postalcodes... almost anything you may need.
But keep in mind, if Google has no info about this location will return a null string!
So for you exapmple should be something like that:
public void animateMap(Location location){
double lat = location.getLatitude();
double lng = location.getLongitude();
String myLocation;
try{
Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
geocoder.getFromLocation(lat, lng, 1);
List<Address> ls=new ArrayList();
ls= geocoder.getFromLocation(lat, lng, 1);
myLocation = ls.get(0).getSubAdminArea();
}catch(Exception e){
myLocation="Sorry, we have no information about this location";
}
Toast.makeText(MyMapActivity.this,
"Sie sind an\n" + myLocation , Toast.LENGTH_SHORT)
.show();
GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
mapController.animateTo(point, new Message());
mapOverlay.setPointToDraw(point);
}
Get the list of Addresses at your location from Geocoder and check for a null or empty result:
Geocoder geocoder = new Geocoder(getApplicationContext,Locale.getDefault());
List<Address> address = geocoder.getFromLocation(lat, long, 1);
String myLocation = "";
if(address != null && !address.isEmpty())
{
myLocation = address.get(0).getSubAdminArea();
}
Related
Guyz I need to get user current location as an latitude and longitude,so I had defined GeoPoint getLocationFromAddress(String strAddress) which takes steAddress as parameter which string addres and then return p1 as geopoint variable.Now my question is that how should I extract latitude and longitude seperately from it so that I can use in request url of google places api.I printed the value of that p1 variable in logcat its 192508911, 731430546.
below is my calling function:
GeoPoint lnglat=getLocationFromAddress(keyword);
System.out.println(lnglat);
Log.d("Location Point",lnglat.toString() );
and here below is the returning function:
public GeoPoint getLocationFromAddress(String strAddress){
Geocoder coder = new Geocoder(this);
List<Address> address;
GeoPoint p1 = null;
try {
address = coder.getFromLocationName(strAddress,5);
if (address == null) {
return null;
}
Address location = address.get(0);
location.getLatitude();
location.getLongitude();
p1 = new GeoPoint((int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
return p1;
}
catch(Exception e){
e.printStackTrace();
}
return p1;
}
GeoPoint class has specific methods:
double lat = lnglat.getLatitude();
double lon = lnglat.getLongitude();
https://developer.mapquest.com/content/mobile/android/documentation/api/com/mapquest/android/maps/GeoPoint.html#getLatitude()
i am try to get latitude & longitude from address , problem is that .. when i give only city name than it give me correct latitude & longitude and when i give complete address (like state , city name , street No.) than it do not give me correct latitude & longitude ...
thanks for your cooperative response ...
my code is ..
//String addressStr = "faisalabad";/// this give me correct address
String addressStr = "Sainta Augustine,FL,4405 Avenue A";
Geocoder geoCoder = new Geocoder(MapClass.this, Locale.getDefault());
try {
List<Address> addresses =
geoCoder.getFromLocationName(addressStr, 1);
if (addresses.size() > 0) {
latitude = addresses.get(0).getLatitude(); longtitude =
addresses.get(0).getLongitude(); }
} catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); }
pos = new LatLng(latitude, longtitude);
googleMap.addMarker(new MarkerOptions().icon(
BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_RED))
.position(pos));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(pos, 15));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
i don it ... :)
only sequence is incorrect ...
first give street address than city name and than state ... it give me correct latitude and longitude from address .. :)
and change
Geocoder geoCoder = new Geocoder(MapClass.this, Locale.getDefault());
to
Geocoder geoCoder = new Geocoder(MapClass.this);
thanks, all of you for your time ...
This is my solution :
private void createMarkerWithLocation() {
/* Use the LocationManager class to obtain GPS locations */
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 300000, 40, this);
Location location = mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
/*check both providers even for lastKnownLocation*/
if (location == null)
location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
LatLng currentLatLng = new LatLng(latitude, longitude);
if(isConnected(this)) {
Geocoder gCoder = new Geocoder(ChoiceDestinationActivity.this);
List<Address> addresses = gCoder.getFromLocation(latitude, longitude, 1);
String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getAddressLine(1);
String country = addresses.get(0).getAddressLine(2);
Toast.makeText(this, country + ", " + city + ", " + address, Toast.LENGTH_SHORT).show();
marker = map.addMarker(new MarkerOptions()
.position(currentLatLng)
.title(city)
.snippet(address)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));
}
}
}
public static boolean isConnected(Context context) {
NetworkInfo ni = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
return (ni!=null && ni.isAvailable() && ni.isConnected());
}
I use it to add a marker on google map. It allows you to retrieve all the information regarding the location of the user.
I hope you have helped!
This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
How can I find the latitude and longitude from address?
I want to get latitude and longitude of particular address . How can i do this ?
private void getFromLocation(String address)
{
double latitude= 0.0, longtitude= 0.0;
Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
try
{
List<Address> addresses = geoCoder.getFromLocationName(address , 1);
if (addresses.size() > 0)
{
GeoPoint p = new GeoPoint(
(int) (addresses.get(0).getLatitude() * 1E6),
(int) (addresses.get(0).getLongitude() * 1E6));
latitude=p.getLatitudeE6()/1E6;
longtitude=p.getLongitudeE6()/1E6;
}
}
catch(Exception ee)
{
}
}
}
You can get from the below code,
private void GetLatitudeAndLongitude() {
geocoder = new Geocoder(mContext, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocationName(txtLocation.getText().toString().trim().toLowerCase(), 1);
if (addresses.size() > 0) {
homeInfoModel.setLalitude(String.valueOf(addresses.get(0).getLatitude()));
homeInfoModel.setLongitude(String.valueOf(addresses.get(0).getLongitude()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
This will give you (loop through) all the matches of the address string.
If you just desire the first match, make sure address.size() is great than 0, then take address.get(0);
In my usage, I get all matches, and show them as options. The user then clicks one, and it selects that GPS location.
Geocoder geocoder = new Geocoder(getBaseContext());
List<Address> addresses;
try {
addresses = geocoder.getFromLocationName("Example StreeT, UK, DNFE", 20);
for(int i = 0; i < addresses.size(); i++) { // MULTIPLE MATCHES
Address addr = addresses.get(i);
double latitude = addr.getLatitude();
double longitude = addr.getLongitude(); // DO SOMETHING WITH VALUES
}
}
I tried to show my current position on map using a marker, find my code below.
but if my position is changed (position updated), the previous marker is still appear.
how to remove previous marker. please help
public void UpdateMyPosition (Location location){
String addressString = "No location found";
if (location != null) {
// Update the map location.
double latitude = location.getLatitude();
double longitude = location.getLongitude();
GeoPoint geoPoint = new GeoPoint((int) (latitude * 1E6),(int) (longitude * 1E6));
mapController.animateTo(geoPoint);
Drawable drawable = this.getResources().getDrawable(R.drawable.red);
MapsOverlay itemizedoverlay2 = new MapsOverlay(drawable, this);
List<Overlay> myOverlays = mapView.getOverlays();
OverlayItem overlayitem2 = new OverlayItem(geoPoint, "", "");
itemizedoverlay2.addOverlay(overlayitem2);
myOverlays.add(itemizedoverlay2);
mapView.postInvalidate();
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(latitude, longitude, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
sb.append(address.getAddressLine(i));
}
addressString = sb.toString();
} catch (IOException e) {}
} else {
addressString = "No location found";
}
Toast.makeText(getBaseContext(),addressString, Toast.LENGTH_SHORT).show();
}
Put
myOverlays.clear();
before
myOverlays.add(itemizedoverlay2);
Maybe it'll be better to use bundled MyLocationOverlay, in this case drawing and updating will be performed automatically.
An other idea would be to not remove the old marker, but to change its position instead.
I want to get latitude and longitude of particular address . How can i do this ?
This is the sample solution to your question.
OR
List<Address> foundGeocode = null;
/* find the addresses by using getFromLocationName() method with the given address*/
foundGeocode = new Geocoder(this).getFromLocationName("address here", 1);
foundGeocode.get(0).getLatitude(); //getting latitude
foundGeocode.get(0).getLongitude();//getting longitude
For more details Geocoder
public List<Address> getFromLocationName (String locationName, int maxResults)
From a Geocoder object, you can call the getFromLocation
public List<Address> getFromLocation (double latitude, double longitude, int maxResults)
It will return a list of Address object that has a method getLocality
Geocoder gcd = new Geocoder(context, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(lat, lng, 1);
if (addresses.size() > 0)
System.out.println(addresses.get(0).getLocality());
for more detail
show the location in google map from address...will get the latitude and longitude using the address...
Geocoder coder = new Geocoder(this);
List<Address> address;
try {
address = coder.getFromLocationName(strAddress,5);
if (address == null) {
return null;
}
Address location = address.get(0);
location.getLatitude();
location.getLongitude();
p1 = new GeoPoint((int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
return p1;
strAddress is string that you pass of address. address variable is address converting and getting address.