Location.distanceTo() ব্যবহার করে দুটি GPS কোঅর্ডিনেটের মধ্যবর্তী দূরত্ব বের করা
অ্যান্ড্রয়েড SDK-তে android.location.Location ক্লাসে বিল্ট-ইন distanceTo() মেথড রয়েছে যা দুটি জিওগ্রাফিক কোঅর্ডিনেট (অক্ষাংশ/দ্রাঘিমাংশ) এর মধ্যবর্তী সরাসরি দূরত্ব (মিটারে) হিসাব করে দেয়। এই টিউটোরিয়ালে এই মেথডটি ব্যবহার করে দূরত্ব নির্ণয়ের পদ্ধতি দেখানো হয়েছে।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textAlignment="center"
android:textSize="18sp"
android:textStyle="bold"
android:padding="16dp" />
</RelativeLayout>
ধাপ ৩: MainActivity.java - দূরত্ব হিসাব করার লজিক
package com.example.distancecalculator;
import android.location.Location;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
// প্রথম লোকেশন (ঢাকা - গুলশান)
Location locationA = new Location("locationA");
locationA.setLatitude(23.7806);
locationA.setLongitude(90.4194);
// দ্বিতীয় লোকেশন (ঢাকা - ধানমণ্ডি)
Location locationB = new Location("locationB");
locationB.setLatitude(23.7500);
locationB.setLongitude(90.3750);
// দূরত্ব হিসাব করুন (ফলাফল মিটারে আসবে)
float distanceInMeters = locationA.distanceTo(locationB);
// কিলোমিটারে রূপান্তর করুন
float distanceInKm = distanceInMeters / 1000f;
// ফলাফল প্রদর্শন করুন
String result = String.format(
"লোকেশন A: গুলশান (২৩.৭৮০৬, ৯০.৪১৯৪)\n" +
"লোকেশন B: ধানমণ্ডি (২৩.৭৫০০, ৯০.৩৭৫০)\n\n" +
"দূরত্ব: %.2f মিটার (%.2f কিমি)",
distanceInMeters, distanceInKm
);
textView.setText(result);
}
}
Location.distanceTo() কীভাবে কাজ করে?
- এলগরিদম: Haversine formula (গোলাকার পৃথিবী ধরে)
- রিটার্ন মান: মিটারে (float) - দুটি পয়েন্টের মধ্যবর্তী স্ট্রেইট-লাইন দূরত্ব
- পরিশুদ্ধি: ছোট দূরত্বের জন্য খুব সঠিক, বড় দূরত্বের জন্য পৃথিবীর বক্রতার কারণে কিছুটা বিচলন হতে পারে
উন্নত ব্যবহার: Location.between() (API 26+)
Android 8.0 (API 26) থেকে স্ট্যাটিক মেথড Location.distanceBetween() ব্যবহার করা যায়:
float[] results = new float[1];
Location.distanceBetween(
lat1, lon1, // প্রথম লোকেশন
lat2, lon2, // দ্বিতীয় লোকেশন
results // ফলাফল এই অ্যারেতে স্টোর হবে
);
float distanceMeters = results[0];
রোড দূরত্ব (Driving Distance) বের করা
distanceTo() শুধু হবাই দূরত্ব (straight-line) দেয়। রাস্তার মাধ্যমে দূরত্বের জন্য Google Directions API বা OSRM API ব্যবহার করতে হবে:
// Google Directions API উদাহরণ (Retrofit + JSON parsing)
String url = "https://maps.googleapis.com/maps/api/directions/json?" +
"origin=" + lat1 + "," + lon1 +
"&destination=" + lat2 + "," + lon2 +
"&key=YOUR_API_KEY";
ধাপ ৪: ম্যানিফেস্ট ফাইল
এই উদাহরণের জন্য কোনোพิশেষ পারমিশন দরকার নেই (শুধু ক্যালকুলেশন)। যদি GPS লোকেশন ব্যবহার করতে চান তবে:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
ফলাফল
অ্যাপ্লিকেশন রান করলে দুটি ঢাকার এলাকার মধ্যবর্তী দূরত্ব মিটার এবং কিলোমিটারে দেখাবে।
অতিরিক্ত টিপস
- বেশি পরিশুদ্ধির জন্য
Geodesicলাইব্রেরি বা Google Maps SDK-এরSphericalUtil.computeDistanceBetween()ব্যবহার করুন - বatches দূরত্ব ক্যালকুলেট করতে
Location.distanceBetween()অ্যারে ব্যবহার করুন - UI-তে দূরত্ব দেখানোর সময় 단위를 স্পষ্ট করুন (মিটার/কিমি/মাইল)