dengan adanya ide dari pkiranku...sebrapa jauh jarak kosku am kampusku (UIN Maliki), maka dengan adanya aplikasi LBS (location based service), dapat diketahui jarak tersebut menggunakan GPS bawa'an google map tersebut...
konsep desain dari aplikasi ini yaitu mengetahui posisi tempat di sekitar anda berpijak, seperti gambar berikut :
Jadi untuk membuat sebuah aplikasi LBS minimal harus mempunyai kemampuan untuk
- Dapat mengetahui koordinat posisi kita
- Punya bank data atau dapat mengakses bank data yang menyimpna data koordinat lokasi dan informasi mengenai lokasi tersebut
- Dapat Menghitung jarak antara posisi kita dengan sebuah lokasi.
- Dapat Menampilkannya menjadi informasi yang bisa dibaca user contohnya kedalam Map (Google Map)
- Dapatkan koordinat posisi kita melalu GPS
- Tetapkan Lokasi-lokasi yang ingin kitampilkan difilter berdasarkan jarak
- Gambar Posisi kita dan Lokasi-lokasi terdekat dalam map
1. Buat Projectnya dengan nama LBSSederhana, lalu ikuti inputan seperti dibawah ini.
2. siapkan gambar yang ingin dicari , semisal : uin.jpg dan diletakkan di directory res/drawable yang terletak pada project tadi, seperti gambar berikut ini:
3. edit file main.xml seperti berikut :
<pre class="prettyprint lang-xml">
<?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></pre> Catatan: ganti "Key Google Map" dengan android:apiKey seperti tutorial kang Agus di situs : http://agusharyanto.net/wordpress/?p=269 |
4. edit file AndroidManifest.xml, seperti 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>
5. Buat class Lokasi.java di directory src, com.edo.map.lok , seperti berikut :
package com.edo.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;
}
} 6. Buat class baru lagi dengan nama MyItemizedOverlay.java , seperti berikut :
package com.edo.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;
}
} 7. Sekarang Mari kita edit File TunjukLokasiBeraksi.java , seperti berikut :
package com.edo.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;
}
}
8. jalankan project tersebut, klik kanan project,pilih Run As, pilih Android Application(Asumsi menggunakan avd dengan google api untuk memunculkan gambar peta yang digunakan tersebut).
maka akan muncul gambar seperti berikut :
Keterangan :
Yang gambar balon merah adalah lokasi kita sedangkan yang lainnya adalah gambar bangunan disekitar kitacoba kita klik/sentuh salah satu bangunan / kampus UIN Maliki Malang. maka akan muncul jarak antara posisi kita (semisal : saya berada posisi di kos) dengan kampusku (UIN Maliki Malang), disertai koordinat longitude dan latitude, seperti gambar berikut :
Seperti yang dijelaskan tadi, akan muncul nama,jarak posisi kampus yaitu 336, 9 m dari posisi Anda.
cukup sekian pencerahan ilmu yang bisa saya kembangkan.
catatan : untuk lebih realnya, anda bisa menambahkan tempat2 yang menarik, semisal tempat makan paling murah dan enak (hehe ...^_^..pikirannya makan melulu), atau dll...
cukup sekian...Assalamu'alaikum Wr.Wb.


Tidak ada komentar:
Posting Komentar