Seri Belajar Android Menampilkan Alamat dari Lokasi User dengan Googlemaps V2

Selamat pagi adik-adik mahasiswa yang ganteng-ganteng dan cantik-cantik serta dengan semangat muda yang menggelora ingin maju dan berprestasi. Yang lagi skripsi ayo tetap semangat menyelesaikannya, konsultasi dengan dosen dan teman jika ada masalah. Jumpa lagi dengan agus haryanto, Seperti yang saya sampaikan pada tutorial sebelumnya bahwa agusharyanto.net akan menyajikan tutorial android untuk menampilkan alamat dari sebuah marker yang ada di peta.

Dulu ingat waktu SMP ada pelajaran Geografi nah disitu kita suka deg-degan kalau gurunya bawa peta besar ke kelas. Dalam hati wah peta buta nih, wah bisa malu nih kalau nggak bisa ditanyain yang ditunjuk guru di peta itu daerah apa. Kalau sekarang tinggal buka HP Android jalanin aplikasi yang ada fitur mencari alamat berdasarkan koordinat daat deh nama daerahnya.

Oke kembali ke materi utama yaitu menampilkan alamat berdasrkan posisi koordinat user (Current Location).

Mari buka eclipse dengan semangat lalu lakukan langkah berikut

1. Buka lagi project PetaLokasi
2. Buka class DisplayCurrentLocActivity.java lalu ketikan kode berikut

package net.agusharyanto.petalokasi;

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

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class DisplayCurrentLocActivity extends FragmentActivity {
	GoogleMap googlemap;
	MarkerOptions markerOptions;
	LatLng latLng;
	LatLng prevLatLng = null;
	Marker marker = null;
	ArrayList<LatLng> arrline = new ArrayList<LatLng>();
	private LocationManager locManager;
	private LocationListener locListener;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.current_loc);

		FragmentManager fragmentManager = getSupportFragmentManager();
		SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager
				.findFragmentById(R.id.mapcurrloc);

		// Getting a reference to the map
		googlemap = supportMapFragment.getMap();
		initLocationManager();
	}

	/**
	 * Initialize the location manager.
	 */
	private void initLocationManager() {
		locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

		locListener = new LocationListener() {
			// method ini akan dijalankan apabila koordinat GPS berubah
			public void onLocationChanged(Location newLocation) {

				displayCurrentLoctoMap(newLocation);
			}

			public void onProviderDisabled(String arg0) {

			}

			public void onProviderEnabled(String arg0) {
				Location location = locManager
						.getLastKnownLocation(LocationManager.GPS_PROVIDER);
				displayCurrentLoctoMap(location);
			}

			public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
			}
		};
		locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
				locListener);
		Location location = locManager
				.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		displayCurrentLoctoMap(location);
	}

	/**
	 * This method will be called when current position changed is submitted via
	 * the GPS.
	 *
	 * @param newLocation
	 */
	protected void displayCurrentLoctoMap(Location newLocation) {
		try {
			LatLng currlok = new LatLng(newLocation.getLatitude(),
					newLocation.getLongitude());

			if (marker != null)
				marker.remove();
			markerOptions = new MarkerOptions().position(currlok)
					.title("Current Location")
					.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));

			googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(currlok, 15));
			 // call and execute ReversGeocoding Task
              new ReverseGeocodingTask(getBaseContext()).execute(currlok);

		} catch (NullPointerException e) {
			Toast.makeText(DisplayCurrentLocActivity.this,"Can't get gps location, make sure your gps is enable",Toast.LENGTH_LONG).show();
		}
	}

	private class ReverseGeocodingTask extends AsyncTask<LatLng, Void, String>{
        Context mContext;

        public ReverseGeocodingTask(Context context){
            super();
            mContext = context;
        }

        // Finding address using reverse geocoding
        @Override
        protected String doInBackground(LatLng... params) {
            Geocoder geocoder = new Geocoder(mContext);
            double latitude = params[0].latitude;
            double longitude = params[0].longitude;

            List<Address> addresses = null;
            String addressText="";

            try {
                addresses = geocoder.getFromLocation(latitude, longitude,1);
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(addresses != null && addresses.size() > 0 ){
                Address address = addresses.get(0);

                addressText = String.format("%s, %s, %s",
                address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "",
                address.getLocality(),
                address.getCountryName());
            }

            return addressText;
        }

        @Override
        protected void onPostExecute(String addressText) {
            // Setting the snippet for the marker.
            // This will be displayed on taping the marker
        	Log.d("TAG","Alamat:"+addressText);
            markerOptions.snippet(addressText);
            marker = googlemap.addMarker(markerOptions);

        }
    }

}

Otak dari pengkonversi koordinat menjadi alamat ini adalah inner class ReverseGeocodingTask dimana didalamnya ada method doInBackground didalam method inilah proses konversi dari koordinat ke alamat dilakukan kalau istilah kerennya Reverse GeoCoder.

3. Sekarang mari kita run Aplikasi, setelah marker muncul dipeta tap marker tersebut maka akan muncul keterangan alamatnya.



Kebetulan saya lagi ada dirumah. Jadi yang muncul adalah alamat rumah saya. Dan harus angkat topi untuk google karena hasil alamatnya sesuai dengan alamat rumah saya.

Tetaplah semangat adik-adiku mahasiswa yang smart

Semoga bermanfaat

Salam hangat

Agus Haryanto

11 comments to Seri Belajar Android Menampilkan Alamat dari Lokasi User dengan Googlemaps V2

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>