使用经度和纬度比较两个位置

时间:2013-08-11 08:30:20

标签: android android-mapview android-location

嗨我需要在onchangelocation()上调用一个事件,通过比较当前纬度和经度与一些保存的纬度和经度,但我得到一个错误。日食不识别关键词距离,并且对于校正错误它给出提示箱子方法“距离”有4参数...如何解决它?或其他一些方法做同样的工作???

感谢和问候。代码附在下面

@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...
  }
}

3 个答案:

答案 0 :(得分:31)

您实际上需要实现一个名为distance的函数来计算两个位置之间的距离。 计算两个位置之间的距离是比较经度和纬度值的一种可能方法。

比较它们的一个例子:

@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
}

答案 1 :(得分:10)

您可以使用Location类的静态distanceBetween()方法,如下所示:

    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...
    }

如果您有两个Location个对象,则另一个选项是distanceTo()

答案 2 :(得分:0)

所有4个输入参数都是浮点数。 距离是相对的而不是真正的距离。您需要通过在线搜索一些公式将此距离转换为真实距离:(我在我的应用程序中使用此功能从我当前位置获取最近的地铁站。希望此片段可以帮助某人:)

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