Juma lagi dengan agus haryanto dalam seri tutorial android. Sudah lama juga yah, kita tidak membahas GPS dan Map. Pada tutorial terdahulu kita sudah belajar mengenal GPS dan Map. Dan ada beberapa pembaca baik melalui email ataupun komentar yang menanyakan bagaimana mengabungkan keduanya, yaitu menampilkan koordinat posisi yang didapat GPS ke dalam MAP.
Seperti biasa, kita bisa minta bantuan Google untuk mencari solusinya. Alhamdulillah ketemu link yang bagus dan kodenya efisien di http://blogs.itemis.de/frey/2009/04/07/location-based-services-on-android-part-2/
Oke sekarang mari kita implementasikan kode dalam link tersebut ke project kita.
1.Buat Project baru dengan nama LokasiKu
2. setelah project tercreate maka secara otomatis android membentuk 3 file yaitu :
- main.xml
- string.xml
- TunjukLokasiBeraksi.java
3. Agar Kita dapat melihat posisi kita pada map maka kita harus menandakan dengan dengan gambar atau icon, dalam dunia google map ini disebut marker. Untuk itu kita perlu meletakkan file gambar untuk marker (marker.png) di directory resàdrawable-mdpi
4. Edit main.xml lalu isikan kode berikut
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.maps.MapView android:id="@+id/mapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="key Google Map" /> </RelativeLayout>
Disini untuk menampilkan MAPnya kita menggunakan tag com.google.android.maps.MapView sedangkan untuk Layoutnya adalah Relative Layout
Untuk android:apiKey, isi dengan key Google Map cara buatnya ada di Belajar Android Pengenalan GoogleMap
5. Untuk dapat melakukan menampilan Map Google Map dan Menangkap GPS dari satelit kita perlu menambahkan <uses-library>
com.google.android.maps dan <uses-permission> INTERNET, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION nya melalui file AndroidManifest.xml , buka file AndroidManifest.xml lalu ketikkan seperti kode berikut
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.agus.gpsmap" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" /> <activity android:name=".TunjukLokasiBeraksi" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> </manifest>
6. Sekarang Mari kita edit File TunjukLokasiBeraksi.java
package com.agus.gpsmap; import java.util.Iterator; import java.util.List; import android.content.Context; import android.graphics.drawable.Drawable; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapView; import com.google.android.maps.OverlayItem; /** * Aplikasi ini mendemonstrasikan untuk menampilkan lokasi posisi koordinat GPS kita saat ini * Pada MAP * @author frey dan diedit oleh Agus Haryanto */ public class TunjukLokasiBeraksi extends MapActivity { private MapView mapView; private LocationManager locManager; private LocationListener locListener; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initMap(); initLocationManager(); } /** * Initialize the map to the LinearLayout. */ private void initMap() { mapView = (MapView) findViewById(R.id.mapView); mapView.displayZoomControls(true); mapView.getController().setZoom(15); } /** * 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) { tampilkanPosisikeMap(newLocation); } public void onProviderDisabled(String arg0) { } public void onProviderEnabled(String arg0) { } public void onStatusChanged(String arg0, int arg1, Bundle arg2) { } }; locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener); } /** * This method will be called when current position changed * is submitted via the GPS. * @param newLocation */ protected void tampilkanPosisikeMap(Location newLocation) { List overlays = mapView.getOverlays(); // first remove old overlay if (overlays.size() > 0) { for (Iterator iterator = overlays.iterator(); iterator.hasNext();) { iterator.next(); iterator.remove(); } } // transform the location to a geopoint GeoPoint geopoint = new GeoPoint( (int) (newLocation.getLatitude() * 1E6), (int) (newLocation .getLongitude() * 1E6)); // initialize icon Drawable icon = getResources().getDrawable(R.drawable.marker); icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon .getIntrinsicHeight()); // create my overlay and show it MyItemizedOverlay overlay = new MyItemizedOverlay(icon); OverlayItem item = new OverlayItem(geopoint, "My Location", null); overlay.addItem(item); mapView.getOverlays().add(overlay); // move to location mapView.getController().animateTo(geopoint); // redraw map mapView.postInvalidate(); } @Override protected boolean isRouteDisplayed() { return false; } }
7. Buat Class Baru dengan nama MyItemizedOverlay.java funngsi untma class ini adalah untuk marker (icon penunjuk posisi kita pada Map)
package com.agus.gpsmap; import java.util.ArrayList; import java.util.List; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import com.google.android.maps.ItemizedOverlay; import com.google.android.maps.MapView; import com.google.android.maps.OverlayItem; public class MyItemizedOverlay extends ItemizedOverlay { private List items; private Drawable marker; public MyItemizedOverlay(Drawable defaultMarker) { super(defaultMarker); items = new ArrayList(); marker = defaultMarker; } @Override protected OverlayItem createItem(int index) { return (OverlayItem)items.get(index); } @Override public int size() { return items.size(); } /* * (non-Javadoc) * * @see * com.google.android.maps.ItemizedOverlay#draw(android.graphics.Canvas, * com.google.android.maps.MapView, boolean) */ @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); boundCenterBottom(marker); } public void addItem(OverlayItem item) { items.add(item); populate(); } }
8. Selesai sudah , sekarang mari kita run projectnya.
9. Kalau kita runnya pakai emulator kita bisa mengupdate lokasinya secara manual,
Kalau di eclipse kita bisa menggunakan emulator control. Apabila jendela Emulation Control belum ada,
kita bisa menampilkannya dengan cara klik Window –> Show View –>Other
Pilih Emulator Control lalu klik OK
isikan saja Longitude = 106.85324 dan Latitute= –6.23326
Klik tombol Send
Kembali ke Emulator Android dan lihat apa yang terjadi
Lokasi yang kita isikan tadi ditunjukkan tampil di peta (Map).
Jika kita mengupdate lokasinya dengan nilai yang lain maka marker akan pindah ke koordinat yang kita isikan
Kalau mau lebih terasa coba install di HP android langsung. Jangan lupa GPSnya dinyalakan. Agar lebih cepat dapat GPSnya cari tempat yang langsung bisa melihat kelangit. Dan buktikan ketepatanya 🙂
Wah kalau kita sudah bisa menampilkan current lokasi kita dimap berarti ini bisa kembangkan untuk membuat Aplikasi LBS (Location Base y).
Jadi kita bisa tahu ada apa saja di sekitar kita. Misalkan kita ingin tahu Rumah Makan Padang yang terdekat dengan lokasi kita.
Satu lagi biar tambah menarik fitur dari googlemap di android yaitu dapat menterjemahkan suatu koordinat menjadi alamat atau sebaliknya. Silahkan dalami tentang API GoogleMap Geocoder dan Reverse Geocoder
Sebelum baca tutorial ini anda dianjurkan membaca tutorial Belajar Android Pengenalan GPS dan Belajar Android Pengenalan GoogleMap
source : {filelink=6}
Semoga Bermanfaat
Salam Hangat
Agus Haryanto
Sumber :
http://blogs.itemis.de/frey/2009/04/07/location-based-services-on-android-part-2/
isikan saja Longitude = 106.85324 dan Latitute=-6.23326
Klik tombol Send
Kembali ke Emulator Android dan lihat apa yang terjadi
saya chek posisi hp di tempat lain pake google map posisinya jauh melenceng gmn tuh
@ujang, pastikan GPS yang diaktipkan adalah GPS satelite. kalau jauh kemungkinan besarnya di belum merefresh koordinat terbarunya jadi masih pakai yang lama.
mau tanya mas, cara ngetahuin koordinatnya aja ada atau ga?
@Alvhin coba cek di blog ini adak yang hanya menampilkan koordinat saj
Saya bikin aplikasi rekomendasi kafe. Udah hampir selesai dan hanya kurang nambahin maps aja. Caranya saya harus menambah coding tersebut di mana ya? Terima kasih.
Gan mohon pencerahan untuk Aplikasi LBSSederhana error….