2012-07-18 40 views
5

Tôi có 3 cách để tính toán khoảng cách và tất cả 3 mang lại cho tôi câu trả lời khác nhau,khoảng cách giữa hai điểm Android

double lat = 6.924049; 
    double lng = 79.853807; 

    double lat1 = 6.856461; 
    double lng1 = 79.912748; 

Làm thế nào để tính toán khoảng cách giữa hai điểm và làm thế nào để phần trăm nó trên Km? hoặc Mét?

cách 1st ans = 9.967441199417708E-6

float[] results = new float[1]; 
Location.distanceBetween(lat/1E6, lng/1E6, lat1/1E6, lng1/1E6,results); 
float s =results[0] * 0.000621371192f; 
String a2 = Float.toString(s); 

2 cách ans = 6.1795527E6

double lat3 = lat/1E6; 
double lat2 = lat1/1E6; 
double lon3 = lng/1E6; 
double lon2 = lng1/1E6; 
double dLat = Math.toRadians(lat2 - lat3); 
double dLon = Math.toRadians(lon2 - lon3); 
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)); 
// 6378.1 is gravity of earth 
double asd = c * 6378.1; 

3 cách ans = 6,176576174444191

{ 
double a5 = distance(lat, lng, lat1, lng1); 
String a6 = Double.toString(a5); 
} 
private double distance(double lat1, double lon1, double lat2, double lon2) { 
     double theta = lon1 - lon2; 
     double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) 
       + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) 
       * Math.cos(deg2rad(theta)); 
     dist = Math.acos(dist); 
     dist = rad2deg(dist); 
     dist = dist * 60 * 1.1515; 
     return (dist); 
    } 

    private double deg2rad(double deg) { 
     return (deg * Math.PI/180.0); 
    } 

    private double rad2deg(double rad) { 
     return (rad * 180.0/Math.PI); 
    } 

Vì vậy, Làm thế nào để tính toán khoảng cách giữa hai điểm và làm thế nào để phần trăm nó trên KM? hoặc Mét?

+0

Vì vậy, câu hỏi của bạn ? – Lucifer

+0

Làm thế nào để tính toán khoảng cách giữa hai điểm và làm thế nào để phần trăm nó trên Km? hoặc Mét? – Loshi

Trả lời

10

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

Sử dụng phương pháp DistanceTo hoặc distanceBetween. Tại sao bạn không thử Location phương pháp của Android here

Bạn có thể tạo một đối tượng vị trí từ vĩ độ và kinh độ:

Location location = new Location(""); 
location.setLatitude(lat); 
location.setLongitude(lon); 
+1

Trả lại khoảng cách gần đúng tính bằng mét giữa vị trí này và vị trí đã cho.Khoảng cách được xác định bằng cách sử dụng WGS84 ellipsoid. – Lucifer

1

Hãy thử công thức này

double dist = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1- y2, 2)); 

Hoặc đi đến liên kết này (Xem thêm có thể tốt hơn cho trường hợp của bạn):

http://www.movable-type.co.uk/scripts/latlong.html

+0

insted của tất cả 3 ở trên? – Loshi

+3

Điều này sẽ hoạt động ... nếu trái đất bằng phẳng. –

+0

@Matt Sieker Xin lỗi đã sửa đổi nó – chandhooguy

0

Không có cách nào để tìm kết quả chính xác trong khi tính toán khoảng cách của địa điểm tròn lớn (trái đất). Bạn sẽ có số phương pháp để tìm khoảng cách như vậy. Bây giờ từ câu hỏi của bạn, tôi muốn đề nghị bạn sử dụng phương pháp thứ 2 hoặc thứ 3 bởi vì, từ quan điểm của tôi kết quả của họ có phần bằng nhau (có thể là khoảng cách nhỏ trong vài mét).

Để phát triển cá nhân của tôi, tôi sử dụng phương pháp thứ ba của bạn. Và đối với độ chính xác, tôi sử dụng 6 chữ số sau dấu thập phân,

ví dụ: trong trường hợp bạn, 6,176576174444191, tôi sử dụng 6,176576

+0

6.176576174444191 câu trả lời là gì? mét? làm thế nào tôi có thể làm cho nó một con số nhỏ? – Loshi

+0

sử dụng làm tròn với định dạng thập phân, 6 chữ số sau dấu thập phân. – Lucifer

+0

6.18 bằng mét phải không? – Loshi

0
double ER=3958.75; 
    double dlong=Math.toRadians(longitude1-longitude); 
           double dlat=Math.toRadians(latitude1-latitude); 
           a=(Math.sin(dlat/2)*Math.sin(dlat/2))+Math.cos(Math.toRadians(latitude))*Math.cos(Math.toRadians(latitude1))*Math.sin(dlong/2)*Math.sin(dlong/2);    
           c=2*Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
           d=ER*c; 

thử với điều này nó sẽ cung cấp cho các khoảng cách bằng km hoặc kiểm tra với điều này link

1

Google Maps Android API Utility Library tính toán khoảng cách và nhiều hơn nữa mà không gặp rắc rối

Bạn có thể sử dụng nó với gradle


dependencies { 
    compile 'com.google.maps.android:android-maps-utils:0.5+' 
} 

double distance = SphericalUtil.computeDistanceBetween(pointA, pointB); 
Các vấn đề liên quan