Tutorial Aplikasi Android LBS Rumah Makan Padang

Jumpa lagi dengan Agus Haryanto dalam seri tutorial Android. Location Based Service (LBS), Nampak terdengar hebat namanya ditelinga apa lagi kalau kita bisa membuat aplikasi yang memanfaatkan Location Based Service. Dari pembaca blog ini mungkin ada yang merasa kagum dengan kemampuan FourSquare yang dapat mengetahui kita checkin digedung apa, mall apa atau restoran apa. Atau dengan aplikasi toresto, aplikasi local android buatan anak bangsa yang mampu memberikan kita infrormasi restoran atau rumah makan yang dekat dengan posisi kita.

•         Anda pernah melihat status teman anda di facebook “Check In @Plaza Semanggi”

•         Anda pernah coba aplikasi yang menunjukkan posisi kita sekaligus tempat-tempat yang dekat dengan kita

•         Semua itu bisa dibilang termasuk golongan Location Based Service (LBS)


Saya juga bertanya-tanya kok bisa yah aplikasi mereka memberikan informasi seperti itu ?

Untuk menjawab pertanyaan itu saya coba buatkan gambar konsep aplikasi LBS

Dari gambar diatas antara kita dengan lokasi-lokasi disekitar kita terdapat jarak, ada yang 200m atau 210m atau 100m dan lainnya. Jadi sudah jelaskan yang dijadikan parameter untuk aplikasi LBS adalah jarak dari posisi kita berada ke lokasi-lokasi di sekitar kita.

Tapi kenapa kok mereka bisa tahu yah nama lokasinya dengan benar, itu karena mereka mempunyai bank data yang menyimpan koordinat lokasi berserta namanya.

Jadi untuk membuat sebuah aplikasi LBS minimal harus mempunyai kemampuan untuk

  1. Dapat mengetahui koordinat posisi kita
  2. Punya bank data atau dapat mengakses bank data yang menyimpna data koordinat lokasi dan informasi mengenai lokasi tersebut
  3. Dapat Menghitung jarak antara posisi kita dengan sebuah lokasi.
  4. Dapat Menampilkannya menjadi informasi yang bisa dibaca user contohnya kedalam Map (Google Map)

Jadi secara singkat Algoritma Aplikasi LBS adalah

  1. Dapatkan koordinat posisi kita melalu GPS
  2. Tetapkan Lokasi-lokasi yang ingin kitampilkan difilter berdasarkan jarak
  3. Gambar Posisi kita dan Lokasi-lokasi terdekat dalam map

Oke langsung saja kita praktekan, Pada Training Bootcamp IndosatM2 sabtu kemarin kami membuat aplikasi LBS Rumah makan padang disekitar ku.

Berikut Langkah-langkahnya

  1. Buat Projectnya, ikuti inputan seperti dibawah ini.

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 dan kita juga file gambar untuk bangunan disekitar kita

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 yang telah kita buat dari tutorial sebelumnya

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.map.lok"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <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-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 buat class Lokasi.java sebagai template object untuk menyimpan data
lokasi bangunan, pada project ini adalah rumah makan padang

package com.agus.map.lok;

public class Lokasi {
	public double lat = 0;
	public double lng = 0;
	public int category = 0;
	public String lokname = "";

	public Lokasi(double plat, double plng, int pcategory, String sname) {
		this.lat = plat;
		this.lng = plng;
		this.category = pcategory;
		this.lokname = sname;
	}
}

7. Buat Class Baru dengan nama MyItemizedOverlay.java funngsi untma class
ini adalah untuk marker (icon penunjuk posisi kita pada Map dan
lokasi rumah makan padang disekitar kita)

package com.agus.map.lok;

import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
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 ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
	private Drawable marker;
	private Context mContext;

	public MyItemizedOverlay(Drawable defaultMarker) {
		super(defaultMarker);
		// items = new ArrayList();
		marker = defaultMarker;
	}

	public MyItemizedOverlay(Drawable defaultMarker, Context context) {
		super(boundCenterBottom(defaultMarker));
		mContext = context;
	}

	@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();
	}

	@Override
	protected boolean onTap(int index) {
		OverlayItem item = items.get(0);
		AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
		dialog.setTitle(item.getTitle());
		dialog.setMessage(item.getSnippet());
		dialog.setPositiveButton("Close", new OnClickListener() {
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
				arg0.dismiss();
			}
		});
		dialog.show();
		return true;
	}

}

8. Sekarang Mari kita edit File TunjukLokasiBeraksi.java

package com.agus.map.lok;

import java.util.ArrayList;
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.Overlay;
import com.google.android.maps.OverlayItem;

/**
 * Aplikasi ini  untuk menampilkan lokasi posisi koordinat GPS
 * kita saat ini Pada MAP dan bangunan disekitarnya
 *
 * @author Agus Haryanto
 */
public class TunjukLokasiBeraksi extends MapActivity {

	private MapView mapView;
	private LocationManager locManager;
	private LocationListener locListener;
	private ArrayList<Lokasi> list_lokasi = new ArrayList<Lokasi>();

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initLokasi();
		initMap();
		initLocationManager();
	}

	/**
	 * Initialize the map to the Data Location.
	 */
	private void initLokasi() {
		list_lokasi.add(new Lokasi(-6.29826d, 106.82024d, 1,
				"RM Padang Sari Mande"));
		list_lokasi.add(new Lokasi(-6.28326d, 106.82324d, 2,
				"RM Padang Sederhana"));
		list_lokasi
				.add(new Lokasi(-6.29326d, 106.83324d, 3, "RM Padang Garuda"));

	}

	/**
	 * 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,
				1000, locListener);

	}

	/**
	 * This method will be called when current position changed is submitted via
	 * the GPS.
	 *
	 * @param newLocation
	 */
	protected void tampilkanPosisikeMap(Location newLocation) {
		List<Overlay> 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));
		GeoPoint myposition = geopoint;
		Location locationA = new Location("point A");
		Location locationB = new Location("point B");
		locationA.setLatitude(geopoint.getLatitudeE6() / 1E6);
		locationA.setLongitude(geopoint.getLongitudeE6() / 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, this);
		OverlayItem item = new OverlayItem(geopoint, "My Location", "Lat:"
				+ locationA.getLatitude() + "\nLng:" + locationA.getLongitude());
		overlay.addItem(item);
		mapView.getOverlays().add(overlay);
		for (int i = 0; i < list_lokasi.size(); i++) {
			geopoint = new GeoPoint((int) (list_lokasi.get(i).lat * 1E6),
					(int) (list_lokasi.get(i).lng * 1E6));
			locationB.setLatitude(geopoint.getLatitudeE6() / 1E6);
			locationB.setLongitude(geopoint.getLongitudeE6() / 1E6);

			double distance = locationA.distanceTo(locationB);

			if (list_lokasi.get(i).category == 1) {
				icon = getResources().getDrawable(R.drawable.shop);
			} else if (list_lokasi.get(i).category == 2) {
				icon = getResources().getDrawable(R.drawable.building);
			}
			else if (list_lokasi.get(i).category == 3) {
				icon = getResources().getDrawable(R.drawable.store);
			}

			icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon
					.getIntrinsicHeight());
			overlay = new MyItemizedOverlay(icon, this);
			item = new OverlayItem(geopoint, list_lokasi.get(i).lokname, "Lat:"
					+ list_lokasi.get(i).lat + "\nLng:"
					+ list_lokasi.get(i).lng + "\n Jarak:" + distance+"m");
			overlay.addItem(item);
			mapView.getOverlays().add(overlay);
		}

		// move to location
		mapView.getController().animateTo(myposition);

		// redraw map
		mapView.postInvalidate();
	}

	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
}

Perhatikan method initLokasi(), pada method ini kita mendaftarkan data lokasi dari rumah makan padang.

Disini datanya bukan data benaran hanya contoh saja agar kita bisa membuktikan kerja Aplikasi ini

private void initLokasi() {
		list_lokasi.add(new Lokasi(-6.29826d, 106.82024d, 1,
				"RM Padang Sari Mande"));
		list_lokasi.add(new Lokasi(-6.28326d, 106.82324d, 2,
				"RM Padang Sederhana"));
		list_lokasi
				.add(new Lokasi(-6.29326d, 106.83324d, 3, "RM Padang Garuda"));

	}



Pada method diatas kita menyimpan datanya ke sebuah ArrayList list_lokasi

Kalau ditablekan akan seperti ini

Latitude Longitude Kategori Nama
-6.29826 106.82024 1 RM Padang Sari Mande
-6.28326 106.82324 2 RM Padang Sederhana
-6.29326 106.83324 3 RM Padang Garuda

Yang penasaran untuk menampilkan marker pada googlemap dengan gambar yang berbeda-beda.

Perhatikan code ini

			if (list_lokasi.get(i).category == 1) {
				icon = getResources().getDrawable(R.drawable.shop);
			} else if (list_lokasi.get(i).category == 2) {
				icon = getResources().getDrawable(R.drawable.building);
			}else if (list_lokasi.get(i).category == 3) {
				icon = getResources().getDrawable(R.drawable.store);
			}

Nah disini bangunan rumah makan padang akan tergambar dimap berdasarkan kategorinya

Kategori Gambar
1 shop.gif
2 building.gif
3 store,gif

Oh ia salah satu syarat aplikasi LBS kan dia harus bisa menghitung jarak.

Nah ternyata android googlemap sudah menyediakan fungsi tersebut yaitu dengan menggunakan distanceTo

9. sekarang mari kita jalankan programnya. Bagi yang menggunakan emulator jangan lupa mainkan
Latitude dan longitudenya dari Emulator Control (DDMS) set Latitude = -6.298418 Longitude=106.82639
maka akan tampil seperti ini

Yang gambar balon merah adalah lokasi kita sedangkan yang lainnya adalah gambar bangunan disekitar kita

coba kita klik/sentuh salah satu bangunan yang paling jauh.

Akan muncul informasi Nama, latitude, longitude dan jarak bangunan tersebut dari posisi kita.

Disini dapat dilihat bahwa nama bangunan itu adalah RM Padang Sederhana dengan jarak 1708,8 m

dari posisi kita.

Nah cobalah klik bangunan lainnya untuk mendapatkan informasinya.

Pada saat ini lokasi bangunan yang ada disekitar kita belum kita filter jaraknya.

Salah satu yang disyaratkan dalam aplikasi LBS adalah filtering jarak.  Sekarang mari kita coba buat filtering atau pembatasan lokasi yang muncul adalah lokasi yang jaraknya kirang dari 1000m.

Untuk itu tambahkan

If (distance <1000){

Dibawah code double distance = locationA.distanceTo(locationB);

Dan  tambah kan {

diatas code  mapView.getController().animateTo(myposition);

Kemudian mari kita run kembali aplikasinya. Maka sekarang yang terlihat hanya 2 bangunan saja.

Wah, tidak menyangkayah kita bisa membuat aplikasi LBS. Alhamdulillah 🙂

Sekarang kita sudah punya satu senjata lagi untuk buat aplikasi yang keren.

Pada aplikasi LBS selain aplikasi, data memegang peranan yang sangat penting, karma kalau tidak ada data adalah hal yang mustahil kita dapat membuat aplikasi LBS. buat para mahasiswa kesempatan nih selain sebagai pengembang kita juga dapat menjadi provider data. Cara yang sederhana adalah dari kumpulkan data bangunan lingkungan sekitar campus dulu.

Semoga Bermanfaat

Agus Haryanto

Sumber :

http://developer.android.com

http://blogs.itemis.de/frey/2009/04/07/location-based-services-on-android-part-2/

212 comments to Tutorial Aplikasi Android LBS Rumah Makan Padang

  • john

    mas, aplikasi ini bangunnya pake sofware ap? mohon spesifikasinya.

  • Nurul

    kalau mau buat aplikasi android berdasarkan menu makanan,
    jdi pas diketik menu makanan,akan tampil nama rumah makan terdekat dulu,
    apakah caranya sama ?
    mohon bantuannya,,
    TA saya,,
    hampir sama ni,,
    hheheee

  • Agus Haryanto

    @Nurul, langkah-langkahnya
    1. Dapatkan data jarak lokasi kita dengan rumah makan
    2. kumpulkan kedalam arrary
    3. Lakukan Sorting data (Bandingkan datanya) pada array tersebut dan masukkan ke dalama array baru (Beriisi data yang sudah terurut berdasarkan jarak terdekat)

  • mas Agus…
    saya mw bikin peta kampus untuk membangun LBS fakultas yang ada dikampus saya,
    namun kalo saya ambil peta di google pastinya tidak tertera gedung fakultas nya lagipula kampus saya tidak terdeteksi di google map (UIN SUSKA RIAU).
    jadi bagaimana cara bikin peta kampus saya tersebut mas?
    apa aplikasi nya trs bagaimana agar bisa digunakan untuk membuat LBS di pltform android seperti google map?

    terimakasih sebelumnya.

  • mochanto93

    mas mau tanya kok aku tiap buat aplikasi yang ada gps nya si peta nya tuh malah jadi yang bukan kita set…
    boleh tau yang kurang dari masalah begitu?terimakasih

  • Ahmad

    Dear Pak Agus Haryanto,
    Saya coba jalankan program tersebut di emulator AVD bejalan normal.
    Tetapi ketika saya install dan coba di 3 Handset Android yang berbeda, program tidak berjalan normal. Tidak bisa menunjukkan lokasi saat ini (peta default menjadi daerah Tulsa Oklahoma).
    GPS dan Network di ketiga Handset tersebut normal. (dibuktikan dengan akses Google Maps normal).
    API key valid (dicoba diprogram lain normal).
    Mohon petunjukknya Pak Agus.

    Salam,

    Ahmad

  • Wedar

    Mas Agus ketika saya coba di device langsung overlaynya kok yang tampil hanya satu ya? mohon pencerahan

  • Tika

    Pak Agus, saya mengalami masalah yang sama dengan Ahmad (peta default menjadi daerah Tulsa)
    mohon bantuannya pak. Terimakasih

  • Tamfan

    Mungkin ada sedikit reviewer mas agus 😀
    If (distance <1000){
    Dibawah code double distance = locationA.distanceTo(locationB);
    Dan tambah kan { diatas code mapView.getController().animateTo(myposition);
    tapi mungkin tambahkan } di dalam if category dan jadi seperti ini :

    double distance = locationA.distanceTo(locationB);
    if (distance < 1000) {

    if (list_lokasi.get(i).category == 1) {
    icon = getResources().getDrawable(R.drawable.shop);
    } else if (list_lokasi.get(i).category == 2) {
    icon = getResources().getDrawable(R.drawable.building);
    } else if (list_lokasi.get(i).category == 3) {
    icon = getResources().getDrawable(R.drawable.store);
    }

    icon.setBounds(0, 0, icon.getIntrinsicWidth(),
    icon.getIntrinsicHeight());
    overlay = new MyItemizedOverlay(icon, this);
    item = new OverlayItem(geopoint, list_lokasi.get(i).lokname,
    "Lat:" + list_lokasi.get(i).lat + "\nLng:"
    + list_lokasi.get(i).lang + "\n Jarak:"
    + distance + "m");
    overlay.addItem(item);
    mapView.getOverlays().add(overlay);
    }
    }
    // move to location
    mapView.getController().animateTo(myposition);

    // redraw map
    mapView.postInvalidate();

  • delfian

    mas kalo mau buat markerny jadi link gimn mas ? soalny mau buat waktu di klik markerny ntar masuk kehalam baru berupa info lengkap tetntang lokasi tersebut misalny ada gambarny trus alamatny trus ada cara kesananya

  • Wedar

    Aslm. Mas Agus Terima kasih atas tutornya ya karena TA saya sudah berhasil selesai berkat tutor ini. salam sukses. doakan sidang saya lancar
    @delfian TA saya juga mamakai konsep detail lokasinya.

  • evalina

    mas. bisa di jelasin lebih detal lagi ga tutor tentang lbs’nya.

  • Nurul

    maksii,,
    tapi mas,
    pencarian terdekatnya cuma dalam bentuk list,,bukan peta
    apakah kita tanamkan gps diaplikasi yang akan kita buat,,
    jdi bisa mengetahui jrak kitasendri ?
    kalau koordinatnya,,
    lagi saya kumpulkan mas,,,
    😀
    bagaimana itu mas ?

  • Nurul

    maksii,,
    tapi mas,
    pencarian terdekatnya cuma dalam bentuk list,,bukan peta
    apakah kita tanamkan gps diaplikasi yang akan kita buat,,
    jdi bisa mengetahui jrak kita sendri ?
    kalau koordinatnya dan menu makanannya,,
    lagi saya kumpulkan mas,,,

    bagaimana itu mas ?

  • Agus Haryanto

    @Nurul, Ia Aplikasi kita tetap harus mengakses GPS. karena lokasi kita itukan ditentukan dari koordinat GPS.

  • Agus Haryanto

    @Wedar, Mantap selamat dah jadi sarjana 🙂

  • delfian

    mas wedar bagi infonya donk ….saya mash blum bisa neh
    masih bingung T_T

  • odonks

    assalamualaikum
    selamat siang mas agus.
    bagus sekali postingannya memberi pencerahan,(sangat bermanfaat)
    btw mas, klo kasusnya ada 3 point rumah makan, lalu aplikasinya bisa menentukan jalur terdekat secara otomatis.
    nah kira-kira apa yang harus saya pelajari mas
    thanks 🙂

  • wahyu

    ini pakai software apa ya?

  • Nurul

    iya mas,,
    makasiihh…
    🙂
    oya mas,,
    ada ga tutorial tentang pecarian dlam bentuk list terdekat ??

  • Wedar

    @delfian saya memakai JSON. jadi data detailnya tidak disimpan di device tetapi di server. intinya sih pada method onTap() yang ada pada ItemizedOverlayItem().

  • yang baca comment yah… saya udah coba step by step setelah selesai udah gak ada error. tapi waktu di jalankan di emulator petanya gak muncul. adanya cuman kotak2. saya sudah ganti API key mdan menggunakan Google APIs 8 sesuai yg diatas. kalau buka aplikasi map biasa bisa kebukan giliran buka file LBSSederhana mapnya gak muncul.
    Help Mohon konfigurasi apa lagi ya??

    Muncul pesan eror di eclipse E/MapActivity(303): Couldn’t get connection factory client

  • Muhammad Reza

    Mas menampilkan gamabar gif bagaimana caranya? codingnya.

  • budaqkampus

    mas..saya mau tanya.gimana jika mau buat peta untuk kampus.?.tapi petanya tidak mau guna google map tapi peta sendiri..

  • Pramono

    mas agus mau nanya nih, untuk API Key.nya melalui https://developers.google.com/maps/documentation/android/v1/maps-api-signup kok tampilannya ngga suruh masukin MD5 ya, apa udah ada yang lainnya?
    mohon bantuannya..
    thx..

  • adit

    mas mohon bantuannya mas, kenapa tampilan map saya di emulator kok di tulsa mas? dan ketika memasukkan lat dan lng dari emulator, hanya muncul marker tidak ada petanya mohon bantuannya mas..

  • Agus Haryanto

    @pramono, Key untuk android googlemaps v1 sudah tidak bisa lagi. harus gunakan Android Googlemaps API V2. tutorilanya bisa dilihat di sini

  • adit

    mas mohon bantuannya mas, kenapa tampilan map saya di emulator kok di daerah tulsa mas? dan ketika memasukkan lat dan lng dari emulator, hanya muncul marker tidak ada petanya.. lalu di tugas akhir saya, saya ingin menampilkan marker yang berasal dari database kira2 gmn mas ya ? mohon bantuannya mas…

  • fina

    mas agus..knp ya sy punya autput tidak bisa keluar..ia keluar msj box

    ..the application(process) has stopped unexpectedly. Please try again.

    gimana mau solvekan.?

  • Agus Haryanto

    @fina, sebelum jalankan tembak dulu GPSnya baru Run di emulator. kalau emulatornya Honeycomb ke atas gunakan assynctask

  • Adie

    mas kalo mau deteksi objek bergerak bisa ngga ??

  • Agus Haryanto

    @Adie, bisa

  • kalo pake google api 2 buat bulid lbs ya gimana ya mas agus. soalnya gagal terus buat nampilin.

    ini kodingan ya tolong di cek mana masih salah ya mas, terima kasih.

    package com.Sarah.RS_KJS;

    import java.util.ArrayList;
    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 android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import com.google.android.maps.GeoPoint;
    import com.google.android.maps.MapActivity;
    import com.google.android.maps.MapView;
    import com.google.android.maps.Overlay;
    import com.google.android.maps.OverlayItem;

    /**
    * Aplikasi ini untuk menampilkan lokasi posisi koordinat GPS
    * kita saat ini Pada MAP dan bangunan disekitarnya
    *
    */
    public class TampilkanPeta extends MapActivity {

    private MapView mapView;
    private LocationManager locManager;
    private LocationListener locListener;
    private ArrayList list_lokasi = new ArrayList();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.show);
    initLokasi();
    initMap();
    initLocationManager();

    Button satelitBtn = (Button)findViewById(R.id.Satelit);
    Button jalanBtn = (Button)findViewById(R.id.Jalan);

    satelitBtn.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
    mapView.setStreetView(false);
    mapView.setSatellite(true);
    }
    }
    );

    jalanBtn.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
    mapView.setStreetView(true);
    mapView.setSatellite(false);

    }
    }
    );
    }

    /**
    * Initialize the map to the Data Location.
    */
    private void initLokasi() {
    /** Jakarta Barat */
    list_lokasi.add(new Lokasi(-6.193099, 106.804469, 1, “RS Pelni”));
    list_lokasi.add(new Lokasi(-6.187659, 106.761446, 2, “RS Puri Mandiri Kedoya”));
    list_lokasi.add(new Lokasi(-6.166454, 106.799598, 3, “RS Sumber Waras”));
    list_lokasi.add(new Lokasi(-6.199264, 106.800971, 4, “RS Bhakti Mulia”));
    list_lokasi.add(new Lokasi(-6.256154, 106.779519, 5, “RS Patria IKKT”));
    list_lokasi.add(new Lokasi(-6.150609, 106.82576, 6, “RS Manuella”));
    list_lokasi.add(new Lokasi(-6.218196, 106.777968, 7, “RS Medika Permata Hijau”));
    list_lokasi.add(new Lokasi(-6.142742, 106.734989, 8, “RSUD Cengkareng”));

    /**Jakarta Pusat */
    list_lokasi.add(new Lokasi(-6.191755, 106.847878, 9, “RS Cipto Mangunkusumo”));
    list_lokasi.add(new Lokasi(-6.210869, 106.812, 10, “RSAL Mintoharjo”));
    list_lokasi.add(new Lokasi(-6.176694, 106.836848, 11, “RSPAD Gatot Soebroto”));
    list_lokasi.add(new Lokasi(-6.191734, 106.846955, 12, “RS Moh Ridwan Meureksa”));
    list_lokasi.add(new Lokasi(-6.171382, 106.80994, 13, “RSUD Tarakan”));
    list_lokasi.add(new Lokasi(-6.172001, 106.87603 , 14, “RS Pertamina Jaya”));
    list_lokasi.add(new Lokasi(-6.18575, 106.844219, 15, “RS Kramat 128”));
    list_lokasi.add(new Lokasi(-6.193569, 106.851954, 16, “RS Moh Husni Thamrin”));
    list_lokasi.add(new Lokasi(-6.196382, 106.851088, 17, “RS St Carolus”));
    list_lokasi.add(new Lokasi(-6.191222, 106.84144, 18, “RS PGI Cikini “));
    list_lokasi.add(new Lokasi(-6.170316, 106.870623, 19, “RS Islam Jakarta”));
    list_lokasi.add(new Lokasi(-6.147574, 106.828737, 20, “RS Husada”));
    list_lokasi.add(new Lokasi(-6.186977, 106.83908, 21, “RS Menteng Mitra Afia”));

    /**Jakarta Selatan */
    list_lokasi.add(new Lokasi(-6.294472, 106.796449, 22, “RS Fatmawati”));
    list_lokasi.add(new Lokasi(-6.304976, 106.813249, 23, “RS Marinir Cilandak”));
    list_lokasi.add(new Lokasi(-6.250512, 106.842568, 24, “RS Tria Dipa”));
    list_lokasi.add(new Lokasi(-6.21778, 106.815863, 25, “RS Jakarta”));
    list_lokasi.add(new Lokasi(-6.209333, 106.84698, 26, “RS Agung”));
    list_lokasi.add(new Lokasi(-6.281195, 106.795866, 27, “RS Setia Mitra”));
    list_lokasi.add(new Lokasi(-6.335906, 106.82348, 28, “RS Zahirah”));
    list_lokasi.add(new Lokasi(-6.268589, 106.766641, 29, “RS Dr Suyoto”));
    list_lokasi.add(new Lokasi(-6.287148, 106.770872, 30, “RS Bhayangkara Selapa Polri”));

    /**Jakarta Timur*/
    list_lokasi.add(new Lokasi(-6.289918, 106.889336, 31, “RS Haji Jakarta”));
    list_lokasi.add(new Lokasi(-6.307279, 106.858994, 32, “RS Kesdam Jaya Cijantung”));
    list_lokasi.add(new Lokasi(-6.269741, 106.870668, 33, “RS Polri Sukanto”));
    list_lokasi.add(new Lokasi(-6.276088, 106.869025, 34, “RS Pusdikkes”));
    list_lokasi.add(new Lokasi(-6.257018, 106.89192, 35, “RSPAU Antariksa”));
    list_lokasi.add(new Lokasi(-6.303963, 106.861805, 36, “RSUD Pasar Rebo”));
    list_lokasi.add(new Lokasi(-6.255983, 106.862867, 37, “RSUD Budi Asih”));
    list_lokasi.add(new Lokasi(-6.202592, 106.885087, 38, “RS Persahabatan”));
    list_lokasi.add(new Lokasi(-6.303022, 106.867431, 39, “RS Harapan Bunda”));
    list_lokasi.add(new Lokasi(-6.250843, 106.871976, 40, “RS UKI Cawang”));
    list_lokasi.add(new Lokasi(-6.248006, 106.909613, 41, “RS Harum”));
    list_lokasi.add(new Lokasi(-6.220191, 106.940083, 42, “RS Islam Jakarta Timur”));
    list_lokasi.add(new Lokasi(-6.195246, 106.905883, 43, “RS Harapan Jayakarta”));
    list_lokasi.add(new Lokasi(-6.175852, 106.885247, 44, “RS Kartika Pulo Mas”));
    list_lokasi.add(new Lokasi(-6.179702, 106.903734 ,45, “RS Mediros”));
    list_lokasi.add(new Lokasi(-6.237256, 106.898777, 46, “RS Yadika”));
    list_lokasi.add(new Lokasi(-6.196374, 106.885719, 47, “RS Rawamangun”));

    /**Jakarta Utara*/
    list_lokasi.add(new Lokasi(-6.108893, 106.900277, 48, “RSUD Koja”));
    list_lokasi.add(new Lokasi(-6.124895, 106.916499, 49, “RS Pelabuhan Jakarta”));
    list_lokasi.add(new Lokasi(-6.126687, 106.792452, 50, “RS Atmajaya”));
    list_lokasi.add(new Lokasi(-6.138485, 106.862812, 51, “RS Satyanegara”));
    list_lokasi.add(new Lokasi(-6.111947, 106.881182, 52, “RS Sukmul Sisma Medika”));
    list_lokasi.add(new Lokasi(-6.139787, 106.920941, 53, “RS Islam Jakarta Utara”));
    list_lokasi.add(new Lokasi(-6.12562, 106.79801, 54, “RS Pluit”));
    list_lokasi.add(new Lokasi(-6.112072, 106.752777, 55, “RS Pantai Indah Kapuk”));
    list_lokasi.add(new Lokasi(-6.110131, 106.888864, 56, “RS Port Medical Center”));
    list_lokasi.add(new Lokasi(-6.166241, 106.916499, 57, “RS Gading Pluit”));
    list_lokasi.add(new Lokasi(-6.138933, 106.865387, 58, “RS Royal Progress”));
    }

    /**
    * Initialize the map to the LinearLayout.
    */
    private void initMap() {
    mapView = (MapView) findViewById(R.id.mapView);

    }

    /**
    * 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,
    1000, locListener);

    }

    /**
    * This method will be called when current position changed is submitted via
    * the GPS.
    *
    */
    @SuppressWarnings(“deprecation”)
    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));
    GeoPoint myposition = geopoint;
    Location locationA = new Location(“point A”);
    Location locationB = new Location(“point B”);
    locationA.setLatitude(geopoint.getLatitudeE6() / 1E6);
    locationA.setLongitude(geopoint.getLongitudeE6() / 1E6);
    // initialize icon
    Drawable icon = getResources().getDrawable(R.drawable.position);
    icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon
    .getIntrinsicHeight());

    // create my overlay and show it
    MyItemizedOverlay overlay = new MyItemizedOverlay(icon, this);
    OverlayItem item = new OverlayItem(geopoint, “My Location”, “Lat:”
    + locationA.getLatitude() + “\nLng:” + locationA.getLongitude());
    overlay.addItem(item);
    mapView.getOverlays().add(overlay);
    for (int i = 0; i < list_lokasi.size(); i++) {
    geopoint = new GeoPoint((int) (list_lokasi.get(i).lat * 1E6),
    (int) (list_lokasi.get(i).lng * 1E6));
    locationB.setLatitude(geopoint.getLatitudeE6() / 1E6);
    locationB.setLongitude(geopoint.getLongitudeE6() / 1E6);

    double distance = locationA.distanceTo(locationB);

    if (list_lokasi.get(i).category == 1) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 2) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 3) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 4) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 5) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 6) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 7) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 8) {

    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 9) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 10) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 11) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 12) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 13) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 14) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 15) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 16) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 17) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 18) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 19) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 20) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 21) {

    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 22) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 23) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 24) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 25) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 26) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 27) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 28) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 29) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 30) {

    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 31) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 32) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 33) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 34) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 35) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 36) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 37) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 38) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 39) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 40) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 41) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 42) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 43) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 44) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 45) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 46) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 47) {
    icon = getResources().getDrawable(R.drawable.marker); }

    else if (list_lokasi.get(i).category == 48) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 49) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 50) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 51) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 52) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 53) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 54) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 55) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 56) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 57) {
    icon = getResources().getDrawable(R.drawable.marker); }
    else if (list_lokasi.get(i).category == 58) {
    icon = getResources().getDrawable(R.drawable.marker); }

    icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon
    .getIntrinsicHeight());
    overlay = new MyItemizedOverlay(icon, this);
    item = new OverlayItem(geopoint, list_lokasi.get(i).lokname, "Lat:"
    + list_lokasi.get(i).lat + "\nLng:"
    + list_lokasi.get(i).lng + "\n Jarak:" + distance+"m");
    overlay.addItem(item);
    mapView.getOverlays().add(overlay);
    }

    // move to location
    mapView.getController().animateTo(myposition);
    ViewGroup zoom=(ViewGroup)findViewById(R.id.zoom);
    zoom.addView(mapView.getZoomControls());

    // redraw map
    mapView.postInvalidate();
    }

    @Override
    protected boolean isRouteDisplayed() {
    return false;
    }
    }

  • deni

    mas agus punya q sudah jalan di gadget, tpi peta belum tampil..apa gara” gadgetnya sudah di cusrom (rom dalam keadaan dimodifikasi)??kalo iya ada solusinya kah??

  • Agus Haryanto

    @deni, paling mudah coba test dulu di HP teman yang romnya masih original

  • mas,
    ada tuts yang seperti ini tapi pake database mysql ga?
    share dong mas..

  • melas

    pak agus pas running di emulator jalan aja, tp pas sya running d ponsel gak mau nemuin posisi saya, knp ya kira-kira pak???
    mohon solisinya pak??

  • Agus Haryanto

    @melas, Pastikan Sudah dapat GPS di Handphonenya. atau buat handling exception kalau belum dapat GPS ada pesan atau bisa kita set kekoordonta tertentu

  • deni

    mas agus kalo pas dijalankan di hp ada keterangan force close yg salah kira” apanya ya??

  • richard

    mas agus ini kalo dibuat menghitung jarak antar posisi kita dengan marker yang diklik bagaimana? terus menampilkan informasi nya.

    satu lagi mas. kenapa AVD emulator nya loading lama sekali. kadang sampe 40 menit baru masuk ke menu emulator nya

  • Nabil

    Mas saya baru belajar android, mau nanya kalau mau bikin aplikasi android misalnya kayak pencarian rumah makan di suatu kota, apa bisa data lokasi itu di simpan dalam devicenya(Sqlite), gag melalui database server seperti Mysql dan PHP?
    mhon penjelasannya mas
    terimaksih

  • Carlos Rizki

    Maaf mas, itu aplikasi yang di pakai apa yah untuk membuat project tersebut … visual basic atau apa gtuh mas ….
    nubi mas …

  • Agus Haryanto

    @carlos, kebetulan saya sudah buat slide untuk persiapannya bisa cek disini http://www.slideshare.net/agusslideshare/langkahlangkah-instalasi-software-untuk-develop-aplikasi-android

  • Agus Haryanto

    @Nabil, Bisa

  • isal

    trimakasih. tutorial ini sangat membantu saya menyelesaikan TA.

    Tapi di aplikasi saya mapsnya tidak tampil. cuma tampil background kotak-kotak ama tulisan google.
    Kira – kira apanya yang salah ?
    mohon bantuannya

  • Ruben

    Mas, saya mau belajar buat ini mas…bisa gak mas Agus jadi mentor saya….Jika bisa kemana sy harus menghubungi…dan brp tarifnya, sy benar2 ingin belajar membuat LBS ini mas…tq

  • Agus Haryanto

    @Ruben, Infonyakan sudah ada di bagian Jasa Konsultasi, di footer artikel juga ada linknya

  • Agus Haryanto

    @isal, Gunakanlah Android GoogleMaps V2

  • isal

    trus kalo mau buat Aplikasi LBS apakah kodingnya sama seperti yang di Tutorial Aplikasi Android LBS Rumah Makan Padang..

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>