2010-07-15 15 views
5

मैंने दो बिंदुओं के बीच की दूरी खोजने के लिए http://www.movable-type.co.uk/scripts/latlong.html पर एल्गोरिदम का उपयोग किया है।दो स्थानों के बीच दूरी सही नहीं है

मेरे दो अंक

long1 = 51.507467; 
lat1 = -0.08776; 

long2 = 51.508736; 
lat2 = -0.08612; 

हैं Movable Type Script के अनुसार जवाब 0.1812km

मेरा आवेदन 0.230km के रूप में परिणाम (d) देता है

चेक Haversine सूत्र: http://www.movable-type.co.uk/scripts/latlong.html

double R = 6371; // earth’s radius (mean radius = 6,371km) 
    double dLat = Math.toRadians(lat2-lat1); 

    double dLon = Math.toRadians(long2-long1); 
    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)); 
    double d = R * c; 

उत्तर

9

अपनी खुद की दूरी कैलकुलेटर बदलने की क्यों, वहाँ Location वर्ग में बनाया गया है।

चेक बाहर

distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results) 
Computes the approximate distance in meters between two locations, and optionally the initial and final bearings of the shortest path between them. 
+0

इसे आज़माएं :) – Ally

+0

यह काम किया! धन्यवाद – Ally

3

आपका कार्यान्वयन सही है। उन अक्षांशों और अक्षांशों को दी गई दूरी को 0.230 km की दूरी का उत्पादन करना चाहिए। निर्देशांक के लिए सामान्य इनपुट, हालांकि, अक्षांश, देशांतर) है। उन्हें पीछे की तरफ रखकर (रेखांश, अक्षांश) 0.1812 km की गलत दूरी का उत्पादन करता है।

+1

ओह ... थोड़ा शर्मिंदा में एक छोटा सा चांग हो। आपकी मदद के लिए धन्यवाद :) – Ally

1
public double CalculationByDistance(GeoPoint StartP, GeoPoint EndP) { 
    double lat1 = StartP.getLatitudeE6()/1E6; 
    double lat2 = EndP.getLatitudeE6()/1E6; 
    double lon1 = StartP.getLongitudeE6()/1E6; 
    double lon2 = EndP.getLongitudeE6()/1E6; 
    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.asin(Math.sqrt(a)); 
    return Radius * c; 
} 

सहयोगी अपने अवधारणा थी right.May इस लाइन double c = 2 * Math.asin(Math.sqrt(a));

संबंधित मुद्दे