2013-08-11 31 views
12

Xin chào tôi cần cal sự kiện tại onchangelocation(), bằng cách so sánh vĩ độ và kinh độ hiện tại với một số vĩ độ và kinh độ đã lưu nhưng tôi gặp phải lỗi. eclipse không nhận ra khoảng cách từ khóa, và cho lỗi sửa chữa nó được đưa ra gợi ý cho phương pháp crate "khoảng cách" có 4 tham số ... làm thế nào để sửa chữa nó ??? hoặc một số cách khác để làm công việc tương tự ???So sánh hai vị trí bằng cách sử dụng Kinh độ và Latitude

cảm ơn và kính trọng. mã được đính kèm bên dưới

@Override 
public void onLocationChanged(Location location) { 
double currentLat=location.getLatitude(); 
double currentLon=location.getLongitude(); 

    if (distance(lat,lon,currentLat,currentLon)<2.0){ 
//do what you want to do... 
    } 
} 
+2

bạn cần phải viết một khoảng cách chức năng, nó không tồn tại trong Android. Bạn cũng có thể muốn kiểm tra điều này: http://developer.android.com/training/location/geofencing.html – Ran

+0

Tôi chỉ đơn giản là muốn so sánh hai vĩ độ và giá trị kinh độ. nếu phù hợp thì muốn gọi một sự kiện khác sự kiện khác. là có cách đơn giản khác để làm điều đó ... là mã hoàn chỉnh của tôi http://stackoverflow.com/questions/18150929/how-to-call-event-depening-upon-latitide-and-longitude/18152841? Noredirect = 1 # 18152841 – user2590541

+0

do đó, đó là vấn đề của phương pháp khoảng cách. bạn sẽ đăng chữ ký của phương pháp khoảng cách. – Sandeep

Trả lời

24

Bạn thực sự cần triển khai một hàm gọi là khoảng cách sẽ tính khoảng cách giữa hai vị trí. Tính khoảng cách giữa hai vị trí là một cách có thể so sánh các giá trị kinh độ và vĩ độ.

Một ví dụ về so sánh chúng:

@Override 
public void onLocationChanged(Location location) { 

double lat2 = location.getLatitude(); 
double lng2 = location.getLongitude(); 

    // lat1 and lng1 are the values of a previously stored location 
    if (distance(lat1, lng1, lat2, lng2) < 0.1) { // if distance < 0.1 miles we take locations as equal 
     //do what you want to do... 
    } 
} 

/** calculates the distance between two locations in MILES */ 
private double distance(double lat1, double lng1, double lat2, double lng2) { 

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output 

    double dLat = Math.toRadians(lat2-lat1); 
    double dLng = Math.toRadians(lng2-lng1); 

    double sindLat = Math.sin(dLat/2); 
    double sindLng = Math.sin(dLng/2); 

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) 
     * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)); 

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 

    double dist = earthRadius * c; 

    return dist; // output distance, in MILES 
} 
+0

Tôi chỉ đơn giản là muốn so sánh hai vĩ độ và kinh độ. nếu phù hợp thì muốn gọi một sự kiện khác sự kiện khác. là có cách đơn giản khác để làm điều đó ... đây là mã hoàn chỉnh của tôi http://stackoverflow.com/questions/18150929/how-to-call-event-depening-upon-latitide-and-longitude/18152841? Noredirect = 1 # 18152841 – user2590541

+0

Sau đó, bạn nên thể hiện bản thân theo cách đó và không sử dụng một hàm gọi là khoảng cách không tồn tại. –

+0

tôi đã thử nhưng đã gặp lỗi ... u có thể làm mã mẫu cho mục đích này – user2590541

0

Tất cả các thông số đầu vào 4 là ở phao. Khoảng cách là khoảng cách tương đối không phải là khoảng cách thực. Bạn cần phải chuyển đổi khoảng cách này cho một khoảng cách thực bằng cách tìm kiếm một số công thức trực tuyến :(Tôi đã sử dụng này trong ứng dụng của tôi để có được ga tàu điện ngầm gần nhất từ ​​vị trí hiện tại của tôi. Hy vọng đoạn này sẽ giúp người :)

float distance(float lat,float lon,float clat,float clon) 
{ 
    float distance; 
    float temp1; 
    float temp2; 
    temp1=(float)((lat-clat)*(lat-clat)); 
    temp2=(float)((lon-clon)*(lon-clon)); 
    distance=temp1+temp2; 
    return distance; 
} 
9

Bạn có thể sử dụng distanceBetween() phương pháp tĩnh lớp của Location như vậy:

float[] distance = new float[1]; 
    Location.distanceBetween(lat, lon, currentLat, currentLon, distance); 
    // distance[0] is now the distance between these lat/lons in meters 
    if (distance[0] < 2.0) { 
     // your code... 
    } 

Nếu bạn có hai Location đối tượng, tùy chọn khác là distanceTo()

Các vấn đề liên quan