3

可能重复:
如何在 Android 上通过 GPS 跟踪距离?

我设计了一个 GPS 应用程序,它可以很好地告诉我的位置。但现在我想包含更多功能。我将如何在那里做一个半径?有5或6公里的周边区域!我怎么能提到那个地区的一个地方和我的地方之间的距离?

4

2 回答 2

2

如果您只是有不同的坐标并想用它们进行计算,只需查看已经可用的 Android 功能:http: //developer.android.com/reference/android/location/Location.html

您可以创建 Location 对象,将纬度/经度坐标与设置函数一起使用,然后使用

float distanceInMeters=location1.distanceTo(location2);

得到结果。

于 2012-11-01T16:23:51.173 回答
0

我觉得这个问题开始变成很多问题。我决定通过将其指向您的问题标题“GPS 应用距离”来解决这个问题。

在我的应用程序中,我没有使用 Google 的 API,而是通过执行以下操作请求用户与 GPS 坐标列表的距离:

在我的JJMath课堂上:

获取距离(Haversine 公式,以英里为单位):

/**
 * @param lat1
 * Latitude which was given by the device's internal GPS or Network location provider of the users location
 * @param lng1
 * Longitude which was given by the device's internal GPS or Network location provider of the users location 
 * @param lat2
 * Latitude of the object in which the user wants to know the distance they are from
 * @param lng2
 * Longitude of the object in which the user wants to know the distance they are from
 * @return
 * Distance from which the user is located from the specified target
*/
public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
    double earthRadius = 3958.75;
    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(lat1) * Math.cos(lat2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double dist = earthRadius * c;

    return dist;
}

然后我将这个数字四舍五入:

/** This gives me numeric value to the tenth (i.e. 6.1) */
public static double round(double unrounded) {
    BigDecimal bd = new BigDecimal(unrounded);
    BigDecimal rounded = bd.setScale(1, BigDecimal.ROUND_CEILING);
    return rounded.doubleValue();
}

我不使用地图叠加层,但我相信会有很棒的教程或答案。

于 2012-11-01T19:00:35.773 回答