Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में दो भौगोलिक स्थानों के बीच दूरी कैसे निकालें

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) का उपयोग करें।
  1. एंड्रॉइड में रिसोर्स ID से रिसोर्स नाम कैसे प्राप्त करें? एंड्रॉइड में रिसोर्स ID से रिसोर्स नाम कैसे प्राप्त करें?

    एंड्रॉइड में रिसोर्स ID से रिसोर्स नाम प्राप्त करना यह उदाहरण दिखाता है कि `getResources().getResourceName()` मेथड का उपयोग करके किसी व्यू की रिसोर्स ID से उसका पूरा नाम (पैकेज:टाइप/नाम) कैसे प्राप्त किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर नया प्रोजेक्ट

  1. Android Emulator का IP एड्रेस कैसे प्राप्त करें? Android Emulator का IP एड्रेस कैसे प्राप्त करें?

    WifiManager का उपयोग करके Android एमुलेटर/डिवाइस का स्थानीय IP एड्रेस प्रोग्रामेटिकली प्राप्त करने का तरीका। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https

  1. प्रोग्रामेटिकली वर्तमान Android SDK वर्जन कैसे प्राप्त करें? प्रोग्रामेटिकली वर्तमान Android SDK वर्जन कैसे प्राप्त करें?

    Android में प्रोग्रामेटिकली SDK वर्जन जानना यह ट्यूटोरियल दिखाता है कि कैसे रनटाइम पर डिवाइस का API लेवल और Android वर्जन प्राप्त किया जाता है, जो वर्जन-स्पेसिफिक फीचर्स इम्प्लीमेंट करने के लिए जरूरी है। चरण 1: प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट में TextView res/l