การหาระยะทางระหว่างจุดพิกัด 2 จุด

ตัวอย่างนี้จะแนะนำการหาระยะทางระหว่างพิกัด โดยอาศัย Google Maps API
โดยมีขั้นตอนดังนี้

Step 1: New Project :

Step 2 : Set Activity Name :

Step 3: แก้ไขไฟล์ MainActivity.java

package utehn.example.getdistance;
// import ....  กด Shift + Ctrl + O  เพื่อ import 
public class MainActivity extends Activity {
	
	double lat_src,lon_src,lat_desc,lon_desc;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        
        TextView tv_km  =(TextView)findViewById(R.id.textView1);
        TextView tv_src  =(TextView)findViewById(R.id.tv_src);
        TextView tv_desc  =(TextView)findViewById(R.id.tv_desc);
        
        
        lat_src= 10.154929;
        lon_src=  76.390316;
        
        lat_desc = 10.015861;
        lon_desc= 76.341867;
        
        tv_src.setText(lat_src+" , "+lon_src);
        tv_desc.setText(lat_desc+" , "+lon_desc);
       
        tv_km.setText(getDistance(lat_src, lon_src, lat_desc, lon_desc));        
       
    }
    
    public String getDistance(double lat1, double lon1, double lat2, double lon2) {
    	String result_in_kms = "";
    	String url = "http://maps.google.com/maps/api/directions/xml?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric";
    	
    	/*        
        Mode ของ google map จะมี 3 mode คือ driving,walking และ bicycling
        	ถ้าเราจะเปลี่ยน mode ก็เพิ่ม &mode=walking ต่อท้าย URL
        */
    	
    	String tag[] = {"text"};
    	HttpResponse response = null;
    	try {
    		HttpClient httpClient = new DefaultHttpClient();
    		HttpContext localContext = new BasicHttpContext();
    		HttpPost httpPost = new HttpPost(url);
    		response = httpClient.execute(httpPost, localContext);
    		InputStream is = response.getEntity().getContent();
    		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    		Document doc = builder.parse(is);
    		if (doc != null) {
    			NodeList nl;
    			ArrayList args = new ArrayList();
    			for (String s : tag) {
    				nl = doc.getElementsByTagName(s);
    				if (nl.getLength() > 0) {
    					Node node = nl.item(nl.getLength() - 1);
    					args.add(node.getTextContent());
    				} else {
    					args.add(" - ");
    				}
    			}
    			result_in_kms = String.format("%s", args.get(0));
    		}
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	return result_in_kms;
    }
    
}

Step 4: แก้ไขไฟล์ activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:gravity="center"
        android:text="ระยะทาง"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="28dp"
        android:text="จาก" />

    <TextView
        android:id="@+id/tv_src"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView3"
        android:gravity="center"
        android:text="tv_src" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/tv_src"
        android:text="ถึง" />

    <TextView
        android:id="@+id/tv_desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView5"
        android:gravity="center"
        android:text="tv_desc" />

</RelativeLayout>

Step 5: แก้ไขไฟล์ AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="utehn.example.getdistance"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"/>
     <uses-permission android:name="android.permission.INTERNET" /> 

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

ดาวน์โหลด : GetDistance.zip

credit : http://androidpallikoodam.wordpress.com/2012/04/23/getting-the-distance-between-locations-using-google-maps-api/

About these ads

4 responses

  1. พี่ค่ะ หนูอยากให้พี่ อธิบายเกี่ยวกับโค้ดนี่ว่ามีการทำงานอย่างไรบ้าง แล้วพี่จะว่าอะไรมั๊ยค่ะ ถ้าหนูจะนำโค้ดของพี่ไปพัฒนาทำโปรเจคต่อ

    1. Copy ได้ครับ ผมไม่หวง ส่วนเรื่องการอธิบาย code ผมขอสงวนสิทธินะครับ

      1. ค่ะ ขอบคุณมากนะค่ะ :D

  2. โปรเจคนี้ลองโหลดไปแล้วลองใช้ดุได้ ปกติ คือว่าผมงง มากเลยครั้ง ผมเลย เอาโค้ดไปลองกับ โปรเจคอื่นมันที่ทำขึ้นเองก็ใช้ไม่ได้อะครับ ลอง สร้างโปรเจคปล่าวมาแล้วก็อบโค็ดไป มัน ไม่ขึ้นคำนวณ km ให้อะครับงง ทั้งที่ โค้ดเหมือนกันแค่ หรือต้องมีโค้ดอันไหนนอกจาก MainActivity.java , activity_main.xml , AndroidManifest.xml รึป่าวครับ ? ขอบคุณครับ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

ติดตาม

Get every new post delivered to your Inbox.