2012-01-04 13 views
6

मुझे दो भूगर्भों के बीच की दूरी की गणना करने में समस्या है।भूगर्भों के बीच दूरी

geopoints हैं:

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

और फिर मैं दूरी की गणना:

float distance = loc.distanceTo(loc2); 

position1 = mapView.getProjection().fromPixels(
(int) e.getX(), 
(int) e.getY()); 

और अन्य एक

double lat = 35.1064; 
double lng = 22.556412; 
GeoPoint position2 = new GeoPoint((int)(lat * 1E6), (int)(lng * 1E6)); 

तो मैं दो स्थानों बनाने

और मैं इसे दौर:

Math.round(distance); 

लेकिन मैं जैसे परिणाम प्राप्त:

1.4331783E7

क्या मैं गलत कर रहा हूँ?

+0

आप क्यों सोच रहे हैं ** 1.4331783E7 ** गलत है? –

+0

क्योंकि दूरी मीटर में होनी चाहिए और जिस बिंदु को मैंने सेट किया है और मैं टैप अधिकतम 100 मीटर दूर है, इसलिए मुझे लगता है कि इसका नतीजा मुझे चाहिए! – user878813

+0

इस लिंक को देखें http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe –

उत्तर

9

कोशिश मेरी पद्धति का अनुसरण,

/** 
* 
* @param lat1 Latitude of the First Location 
* @param lng1 Logitude of the First Location 
* @param lat2 Latitude of the Second Location 
* @param lng2 Longitude of the Second Location 
* @return distance between two lat-lon in float format 
*/ 

public static float distFrom (float lat1, float lng1, float lat2, float lng2) 
{ 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(lat2-lat1); 
    double dLng = Math.toRadians(lng2-lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
    Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double dist = earthRadius * c; 

    int meterConversion = 1609; 

    return new Float(dist * meterConversion).floatValue(); 
} 
0

आप डबल मूल्य के बजाय स्थान वस्तु में GeoPoint मूल्य स्थापित कर रहे हैं

Location loc = new Location("");         

loc.setLatitude(35.1064); 

loc.setLongitude(22.556412); 

Location loc2 = new Location("");        

loc2.setLatitude(22.556412); 

loc2.setLongitude(35.1064); 

अब मिल अक्षांश और देशांतर के रूप में दोहरी मूल्य सेट करने का प्रयास स्थान

float distance = loc.distanceTo(loc2); 
+0

मैं दोनों मानों को शुद्ध संख्या के रूप में सेट नहीं कर सकता क्योंकि पहला भूगर्भीय उपयोगकर्ता मानचित्र के मानचित्र के अनुसार उत्पादित होता है। – user878813

+0

जो भी मैं डबल प्रारूप में मान पास करके उदाहरण देता हूं, आप geeoint मान को 1e6 मान जैसे loc.setLatitude (position1.getLatitudeE6()/1E6) का उपयोग करके विभाजित कर सकते हैं और एक और चीज है जिसे आपने सेट नहीं किया है loc2 ऑब्जेक्ट के लिए lat/lng मान आप केवल स्थानीय मान को बदलते हैं – Pratik

1

आप गलत अक्षांश और अक्षांश ले रहे हैं, कृपया वें स्थानांतरित करें ई निम्नलिखित लाइनों

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()/1E6); 

loc.setLongitude(position1.getLongitudeE6()/1E6); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()/1E6); 

loc.setLongitude(position2.getLongitudeE6()/1E6); 

और फिर एक बार साथ, आप सही उत्तर मिल जाएगा।

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