2012-07-02 88 views
5

Tôi cần phát triển ứng dụng nơi người dùng phải định vị chiếc xe của mình mà anh ta đã đỗ và hiển thị khoảng cách giữa anh ấy và ô tô đỗ. Tôi đã sử dụng dịch vụ định vị và GPS.cách tìm khoảng cách chính xác giữa hai địa chỉ trong bản đồ?

Đối với khoảng cách tôi đã sử dụng haversine công thức nhưng khoảng cách luôn hiển thị 0 mét.

Tôi đã thử rất nhiều giải pháp tìm kiếm trong google nhưng dint nhận được bất kỳ giải pháp chính xác nào.

Có ai có thể đưa ra đề xuất của họ không?

+0

bản sao của http://stackoverflow.com/questions/2741403/get-the-distance-between-two-geo- điểm – logcat

+0

Đọc tất cả câu trả lời của Câu hỏi này http://stackoverflow.com/questions/7696112/gettting-different-distance-when-using-the-google-map-and-user-defined-function/7752341#7752341 – MKJParekh

+0

xem câu hỏi [ở đây] (http://stackoverflow.com/questions/19218081/how-to-calculate-distance-from-different-markers-in-a-map-and-then-pick-up-the-l) . Điều này có câu trả lời tương tự với nhiều phép tính khoảng cách. Xem câu trả lời được chấp nhận. – Akshat

Trả lời

1

android.location.Location.distanceBetween (startLatitude đôi, startLongitude đôi, endLatitude đôi, endLongitude đôi, float [] kết quả)

Geopoints có getLongitudeE6() và getLatitudeE6() để giúp đỡ. Hãy nhớ rằng đó là E6, do đó bạn cần chia cho 1E6.

12

Google Documents có hai phương pháp

enter image description here

Nếu bạn đang nhận được lat/lon từ GeoPoint sau đó họ đang có trong microdegrees. Bạn phải nhân với 1e6.

Nhưng tôi thích sử dụng phương thức bên dưới. (Dựa trên Haversine Formula)

http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe

double dist = GeoUtils.distanceKm(mylat, mylon, lat, lon); 

/** 
* Computes the distance in kilometers between two points on Earth. 
* 
* @param lat1 Latitude of the first point 
* @param lon1 Longitude of the first point 
* @param lat2 Latitude of the second point 
* @param lon2 Longitude of the second point 
* @return Distance between the two points in kilometers. 
*/ 

public static double distanceKm(double lat1, double lon1, double lat2, double lon2) { 
    int EARTH_RADIUS_KM = 6371; 
    double lat1Rad = Math.toRadians(lat1); 
    double lat2Rad = Math.toRadians(lat2); 
    double deltaLonRad = Math.toRadians(lon2 - lon1); 

    return Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) * EARTH_RADIUS_KM; 
} 

Cuối cùng tôi muốn chia sẻ thông tin tiền thưởng.

Nếu bạn đang tìm kiếm đường lái xe, tuyến đường giữa hai địa điểm sau đó đi đến

http://code.google.com/p/j2memaprouteprovider/

+1

hey ... bạn có thể vui lòng giải thích cách hoạt động này không ?? –

+0

@ Archie.bpgc Xem câu trả lời cập nhật của tôi. –

+0

@VipulShah - Tôi nghĩ rằng điều này cho khoảng cách thẳng giữa hai GeoPoints, Không phải là một hướng hoặc khoảng cách lái xe, phải không? – user370305

3

Hãy thử sử dụng phương pháp này trong android.location API

distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)

Phương pháp này tính khoảng cách gần đúng tính bằng mét giữa hai vị trí và tùy chọn vòng bi đầu tiên và cuối cùng của con đường ngắn nhất giữa chúng

NB: Nếu bạn đang nhận được lat/lon từ GeoPoint thì chúng đang ở microdegrees. Bạn phải nhân với 1E6

NẾU bạn muốn tính distace giữa 2 Geopoint bởi thức Haversine

public class DistanceCalculator { 
    // earth’s radius = 6,371km 
    private static final double EARTH_RADIUS = 6371 ; 
    public static double distanceCalcByHaversine(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.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
     return EARTH_RADIUS * c; 
    } 
} 
1

Vấn đề với công thức harvesine là nó không tính toán khoảng cách thực sự. Đó là khoảng cách từ 2 điểm trên một hình cầu. Khoảng cách thực sự phụ thuộc vào đường phố hoặc đường nước. Công thức harvesine cũng phức tạp một chút do đó dễ dàng hơn khi yêu cầu Google-Api cung cấp khoảng cách thực. Với Googlemaps Api bạn cần phải tìm hiểu hướng dẫn api.

3

distanceBetween() phương pháp sẽ cung cấp cho bạn khoảng cách thẳng giữa hai điểm. Có được khoảng cách tuyến đường giữa hai điểm nhìn thấy ansewer của tôi Here

0

distanceBetween không thu về khoảng cách thực (khoảng cách đường bộ) Vì vậy, tôi đề nghị bạn truy cập mã nguồn google này và nó sẽ phân biệt bạn khoảng cách đường thực 2 geopoints. Link có 2 phiên bản một cho Android và một cho blackberry check it out

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