2017-03-28 5 views
1

두 위치가 있으며 미터로 거리를 계산하려고합니다. 코드를 작성했지만 완벽하게 작동하지 않습니다.미터 내의 두 위치 간 거리 계산

private void getDistancBetweenTwoPoints(double lat1,double lon1,double lat2,double lon2) 
{ 
    Location loc1 = new Location(""); 
    loc1.setLatitude(lat1); 
    loc1.setLongitude(lon1); 

    Location loc2 = new Location(""); 
    loc2.setLatitude(lat2); 
    loc2.setLongitude(lon2); 

    int R = 6371; // km 

    double dLat = deg2rad(lat2-lat1); 
    double dLon = deg2rad(lon2-lon1); 
    double a = 
      Math.sin(dLat/2) * Math.sin(dLat/2) + 
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
          Math.sin(dLon/2) * Math.sin(dLon/2) 
      ; 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double distanceInMeters = R * c; 
    Log.e("distanceInMeters",distanceInMeters/10000+"mm"); 
} 

public double deg2rad(double deg) { 
    return deg * (Math.PI/180); 
} 

어떻게 미터로 거리를 계산할 수 있습니까? 내 목표는 계량기가 200을 초과하는 경우입니다. 문제를 어떻게 해결할 수 있습니까?

답변

0

두 위도/경도 점 & 사이의 거리를 계산하려면이 방법을 사용하십시오.

/** 
* Calculate distance between two points in latitude and longitude taking 
* into account height difference using the Haversine method as its base. 
* 
* Elevation should be in meters. If you are not interested in elevation, pass 0. 
* 
* @return Distance in meters 
*/ 
private double distanceBetween(double lat1, double lat2, double lon1, 
           double lon2, double el1, double el2) { 

    final int R = 6371; // Radius of the earth 

    double latDistance = Math.toRadians(lat2 - lat1); 
    double lonDistance = Math.toRadians(lon2 - lon1); 
    double a = Math.sin(latDistance/2) * Math.sin(latDistance/2) 
      + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) 
      * Math.sin(lonDistance/2) * Math.sin(lonDistance/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double distance = R * c * 1000; // convert to meters 

    double height = el1 - el2; 

    distance = Math.pow(distance, 2) + Math.pow(height, 2); 

    return Math.sqrt(distance); 
} 
3

휠을 다시 작성할 필요가 없습니다.

Location.distanceBetween() 방법을 사용할 수 있습니다. the documentation 가입일

: 당신의 거리를 계산하기위한 코드 아래 사용

private float getDistancBetweenTwoPoints(double lat1,double lon1,double lat2,double lon2) { 

    float[] distance = new float[2]; 

    Location.distanceBetween(lat1, lon1, 
      lat2, lon2, distance); 

    return distance[0]; 
} 
0

:

두 위치

여기

간단한 예 간의 거리의 대략적인 거리를 계산 두 위치 사이 미터 :

private double distanceBetween(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 = dist * 180.0/Math.PI; 
    dist = dist * 60 * 1.1515*1000; 
    return (dist); 
} 

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