android - दो भौगोलिक स्थानों के बीच दूरी की गणना



location distance (4)

इस कोड को आजमाएं। यहां हमारे पास दो देशांतर और अक्षांश मान हैं और select_location.distance (near_locations) फ़ंक्शन मीटर में उन स्थानों के बीच की दूरी देता है।

Location selected_location=new Location("locationA");
            selected_location.setLatitude(17.372102);
            selected_location.setLongitude(78.484196);
Location near_locations=new Location("locationB");
            near_locations.setLatitude(17.375775);
            near_locations.setLongitude(78.469218);
double distance=selected_location.distanceTo(near_locations);

यहां "दूरी" स्थान ए और लोकेशनबी के बीच दूरी है (मीटर में)

https://ffff65535.com

कृपया इस स्थिति पर कुछ प्रकाश डालें

अभी मेरे पास दो सरणी हैं जो आस-पास के स्थानों के अक्षांश और देशांतर रखते हैं और उपयोगकर्ता स्थान भी लचीला और लम्बाई है, अब मैं उपयोगकर्ता स्थान और आस-पास के स्थानों के बीच की दूरी की गणना करना चाहता हूं और उन्हें सूचीदृश्य में दिखाना चाहता हूं।

मुझे पता है कि दूरी की गणना करने के लिए एक विधि है

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results);

अब समस्या यह है कि इस विधि में आस-पास अक्षांश और दीर्घायु वाले इन दो सरणी को कैसे पास किया जाए और दूरी की सरणी प्राप्त करें।


केवल एक उपयोगकर्ता स्थान है, इसलिए आप आस-पास की जगहों की पुनरावृत्ति कर सकते हैं distanceTo() प्राप्त करने के लिए distanceTo() फ़ंक्शन को कॉल कर सकते हैं, यदि आप चाहें तो सरणी में स्टोर कर सकते हैं।

जो मैं समझता हूं, उससे distanceBetween() दूर दूर स्थानों के लिए है, यह आउटपुट एक डब्लूजीएस 84 एलिप्सिड है।


http://developer.android.com/reference/android/location/Location.html

दूरी या दूरी के बीच में देखो। आप अक्षांश और देशांतर से स्थान वस्तु बना सकते हैं:

Location locationA = new Location("point A");

locationA.setLatitude(latA);
locationA.setLongitude(lngA);

Location locationB = new Location("point B");

locationB.setLatitude(latB);
locationB.setLongitude(lngB);

float distance = locationA.distanceTo(locationB);

या

private double meterDistanceBetweenPoints(float lat_a, float lng_a, float lat_b, float lng_b) {
    float pk = (float) (180.f/Math.PI);

    float a1 = lat_a / pk;
    float a2 = lng_a / pk;
    float b1 = lat_b / pk;
    float b2 = lng_b / pk;

    double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2);
    double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2);
    double t3 = Math.sin(a1) * Math.sin(b1);
    double tt = Math.acos(t1 + t2 + t3);

    return 6366000 * tt;
}

    private static Double _MilesToKilometers = 1.609344;
    private static Double _MilesToNautical = 0.8684;


    /// <summary>
    /// Calculates the distance between two points of latitude and longitude.
    /// Great Link - http://www.movable-type.co.uk/scripts/latlong.html
    /// </summary>
    /// <param name="coordinate1">First coordinate.</param>
    /// <param name="coordinate2">Second coordinate.</param>
    /// <param name="unitsOfLength">Sets the return value unit of length.</param>
    public static Double Distance(Coordinate coordinate1, Coordinate coordinate2, UnitsOfLength unitsOfLength)
    {

        double theta = coordinate1.getLongitude() - coordinate2.getLongitude();
        double distance = Math.sin(ToRadian(coordinate1.getLatitude())) * Math.sin(ToRadian(coordinate2.getLatitude())) +
                       Math.cos(ToRadian(coordinate1.getLatitude())) * Math.cos(ToRadian(coordinate2.getLatitude())) *
                       Math.cos(ToRadian(theta));

        distance = Math.acos(distance);
        distance = ToDegree(distance);
        distance = distance * 60 * 1.1515;

        if (unitsOfLength == UnitsOfLength.Kilometer)
            distance = distance * _MilesToKilometers;
        else if (unitsOfLength == UnitsOfLength.NauticalMiles)
            distance = distance * _MilesToNautical;

        return (distance);

    }




latitude-longitude