Kamis, 04 April 2013

Membuat Click Google Map Android Untuk Mendapatkan Latitude Longitude, OnClick MapView Get Latitude Longitude

Wah susah juga mendapatkan judul yang tepat untuk artikel ini. Intinya, kadang penulis membuat aplikasi Android untuk mendapatkan Latitude dan Longitude dari GPS agar bisa digunakan atau disimpan pada Database. Tetapi bagaimana jika pengguna Aplikasi tidak harus berada di tempat yang ingin diketahui/dicatat  Latitude Longitude nya.

Tentu saja harapannya dengan Klik atau Tap langsung di Google Map akan bisa mendapatkan Latitide dan Longitude nya. Pada Google Map Android Versi 2 Cukup Mudah, Kita Bahas Lain Kali pada Artikel yang Lain. Kali ini kita buat Aplikasi tersebut pada  Google Map Android Versi 1 dahulu.

Caranya, buat aplikasi Android dengan Platform Google API seperti biasa. Buat Main Activity seperti berikut :


package com.amijaya.androidgooglemaptapgetlatlng;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;



import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

//http://cariprogram.blogspot.com
//nuramijaya@gmail.com
public class MainActivity extends MapActivity {
MapView mapView;
long startTime;
long endTime;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mapView = (MapView)findViewById(R.id.mapView);
        double lat = -7.782939;
        double lng = 110.36705000000006;
        GeoPoint point = new GeoPoint((int) (lat *1E6),(int) (lng * 1E6));
        mapView.getController().animateTo(point);
        mapView.getController().setZoom(15);
     
        mapView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                
            /*//jika ingin touch saja lgs muncul, bukan long touch (long press)
            GeoPoint p = null;

                if (event.getAction() == MotionEvent.ACTION_UP) {
                    p = mapView.getProjection().fromPixels((int) event.getX(),
                            (int) event.getY());
                    //mapBackButton.setText(p.getLatitudeE6() / 1E6 + ","
                    //        + p.getLongitudeE6() / 1E6 + "Action is : "
                    //        + event.getAction());
                    
                    Toast.makeText(
                            getBaseContext(),
                            p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6()
                                    / 1E6 + "Action is : " + event.getAction(),
                            Toast.LENGTH_SHORT).show();
                    
                    return true;
                    
                }
                */
           
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                    //record the start time
                    startTime = event.getEventTime();
                 }else if(event.getAction() == MotionEvent.ACTION_UP){
                    //record the end time
                    endTime = event.getEventTime();
                 }

                 //verify
                 if(endTime - startTime > 1000){
                    //we have a 1000ms duration touch
                    //propagate your own event
                
                GeoPoint p = null;

                     if (event.getAction() == MotionEvent.ACTION_UP) {
                         p = mapView.getProjection().fromPixels((int) event.getX(),
                                 (int) event.getY());
                         
                         Toast.makeText(
                                 getBaseContext(),
                                 p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6()
                                         / 1E6 + "Action is : " + event.getAction(),
                                 Toast.LENGTH_SHORT).show();
                         
                         return true;
                         
                     }
                     
                     return true; //notify that you handled this event (do not propagate)
                 }
           
                return false;
            }
        });
    }

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

/*//seharusnya betul tapi tidak jalan

@Override
    public boolean onTouchEvent(MotionEvent ev) {
       if(ev.getAction() == MotionEvent.ACTION_DOWN){
          //record the start time
          startTime = ev.getEventTime();
       }else if(ev.getAction() == MotionEvent.ACTION_UP){
          //record the end time
          endTime = ev.getEventTime();
       }

       //verify
       if(endTime - startTime > 1000){
          //we have a 1000ms duration touch
          //propagate your own event
      
      GeoPoint p = null;

           p = mapView.getProjection().fromPixels((int) ev.getX(),
                       (int) ev.getY());
           Toast.makeText(
                       getBaseContext(),
                       p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6()
                               / 1E6 + " Event : " + ev.getAction(),
                       Toast.LENGTH_LONG).show();
           
           return true; //notify that you handled this event (do not propagate)
       }
       
       return false;
       
    }
    */
}


Kemudian buat Halaman Utama main.xml seperti ini :


<?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="0q1s--GANTI-DGN-API-KEY-ANDA--EpA"
        />

</RelativeLayout>


Jangan lupa AndroidManifest disesuaikan agar bisa memanggil library Google Map dan Memiliki Permission INTERNET seperti ini :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amijaya.androidgooglemaptapgetlatlng"
      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=".MainActivity"
                  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="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest> 


Hasilnya ketika diklik pada Peta :



Project Selengkapnya silakan Didownload Disini. Pada Google Drive Klik File-Download

Semoga Bermanfaat.