Location.distanceTo() विधि का उपयोग करके दो GPS निर्देशांकों के बीच दूरी की गणना
एंड्रॉइड का android.location.Location क्लास दो भौगोलिक निर्देशांकों (अक्षांश/देशांतर) के बीच सीधी रेखा (हवाई दूरी) की गणना के लिए बिल्ट-इन distanceTo() विधि प्रदान करता है। यह हेवर्साइन फॉर्मूला का उपयोग करता है और परिणाम मीटर में देता है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में प्रोजेक्ट बनाएं।
चरण 2: लेआउट फ़ाइल
res/layout/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"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvDistance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textSize="18sp"
android:textStyle="bold"
tools:text="दूरी: 1.25 किमी" />
</RelativeLayout>
चरण 3: MainActivity में दूरी गणना
package com.app.sample;
import android.location.Location;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView tvDistance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvDistance = findViewById(R.id.tvDistance);
calculateDistance();
}
private void calculateDistance() {
// स्थान A: हैदराबाद (उदाहरण निर्देशांक)
Location locationA = new Location("LocationA");
locationA.setLatitude(17.372102);
locationA.setLongitude(78.484196);
// स्थान B: हैदराबाद में ही दूसरा स्थान
Location locationB = new Location("LocationB");
locationB.setLatitude(17.375775);
locationB.setLongitude(78.469218);
// दूरी मीटर में प्राप्त करें
double distanceInMeters = locationA.distanceTo(locationB);
// विभिन्न इकाइयों में प्रदर्शित करें
double distanceInKm = distanceInMeters / 1000;
double distanceInMiles = distanceInMeters * 0.000621371;
String result = String.format(
"स्थान A: (%.6f, %.6f)\nस्थान B: (%.6f, %.6f)\n\nदूरी: %.2f मीटर (%.3f किमी / %.3f मील)",
locationA.getLatitude(), locationA.getLongitude(),
locationB.getLatitude(), locationB.getLongitude(),
distanceInMeters, distanceInKm, distanceInMiles
);
tvDistance.setText(result);
}
}
एडवांस्ड: हेवर्साइन फॉर्मूला मैन्युअल इम्प्लीमेंटेशन
यदि आपको Location क्लास के बिना गणना करनी हो:
public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) {
final int EARTH_RADIUS_KM = 6371; // पृथ्वी की त्रिज्या किमी में
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS_KM * c; // किमी में दूरी
}
रियल-टाइम GPS लोकेशन से दूरी
यदि आप डिवाइस की वर्तमान लोकेशन से दूरी चाहते हैं:
// FusedLocationProviderClient का उपयोग करें (Google Play Services)
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
fusedLocationClient.getLastLocation().addOnSuccessListener(location -> {
if (location != null) {
Location destination = new Location("Destination");
destination.setLatitude(28.6139); // दिल्ली
destination.setLongitude(77.2090);
double distance = location.distanceTo(destination);
// UI अपडेट करें
}
});
}
आवश्यक अनुमतियां
AndroidManifest.xml में:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
महत्वपूर्ण बिंदु
- distanceTo() मीटर में परिणाम देता है (float/double)
- यह सीधी रेखा (हवाई दूरी) है, सड़क मार्ग की दूरी नहीं
- सड़क मार्ग की दूरी के लिए Google Maps Directions API या GraphHopper जैसे रूटिंग इंजन का उपयोग करें
- उच्च परिशुद्धता के लिए
Location.setAltitude()भी सेट कर सकते हैं
नोट: यह गणना पृथ्वी को पूर्ण गोला मानती है। अत्यधिक सटीक सर्वेक्षण कार्यों के लिए विन्सेंटी फॉर्मूला या जियोडेटिक लाइब्रेरी (जैसे GeographicLib) का उपयोग करें।