2012-01-04 72 views
6

Tôi gặp vấn đề khi tính khoảng cách giữa hai địa chỉ.Khoảng cách giữa các địa chỉ

Các geopoints là:

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

và một trong những khác

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

Sau đó, tôi tạo ra hai địa điểm:

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

Và sau đó tôi tính toán khoảng cách:

float distance = loc.distanceTo(loc2); 

và tôi tròn nó:

Math.round(distance); 

Nhưng tôi nhận được kết quả như sau:

1.4331783E7

Tôi đang làm gì sai?

+0

lý do bạn nghĩ ** 1,4331783E7 ** là sai? –

+0

Nguyên nhân khoảng cách phải bằng mét và điểm tôi đặt và tôi nhấn tối đa 100 mét nên tôi nghĩ đó không phải là kết quả tôi cần! – user878813

+0

Kiểm tra liên kết này http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe –

Trả lời

9

thử theo phương pháp của tôi,

/** 
* 
* @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

bạn đang thiết lập giá trị GeoPoint vào đối tượng Location thay vì giá trị gấp đôi cố gắng thiết lập giá trị như đôi Latitude và Longitude

Location loc = new Location("");         

loc.setLatitude(35.1064); 

loc.setLongitude(22.556412); 

Location loc2 = new Location("");        

loc2.setLatitude(22.556412); 

loc2.setLongitude(35.1064); 

bây giờ có được sự vị trí

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

Tôi không thể đặt cả hai giá trị dưới dạng số thuần bởi vì geopoint đầu tiên được tạo theo vị trí của bản đồ mà người dùng chạm vào. – user878813

+0

bất cứ điều gì tôi chỉ đưa ra ví dụ bằng cách chuyển giá trị theo định dạng kép, bạn có thể chuyển giá trị geopoint bằng cách chia chúng bằng giá trị 1e6 như loc.setLatitude (position1.getLatitudeE6()/1E6) và một điều khác là bạn không đặt giá trị lat/lng cho đối tượng loc2 bạn chỉ cần thay đổi giá trị loc – Pratik

1

Bạn đang sử dụng vĩ độ và kinh độ, vui lòng thay thế e sau dòng

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

với

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); 

và sau đó một lần, bạn sẽ nhận được câu trả lời đúng.

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