android app:获取两个地址之间的距离

时间:2013-11-21 06:53:19

标签: java android google-maps

这是我第一次在android应用程序中开发。此应用程序将计算用户输入的两个地址之间的总距离,以获得总距离。可以计算出道路是直的距离吗?顺便说一句,这个应用程序将不会显示地图,也不需要GPS!它只需要使用地理编码器来获得纬度 - 经度。

以下是我的问题:

  1. AndroidManifest.xml会是什么样子?我是否需要加入android:name=".permission.MAPS_RECEIVE".
  2. 在main_activity.java中,我应该使用activity还是使用片段活动? public class MainActivity extends Activity
  3. 感谢您的回复,我想感谢你们,如果可能的话,请你们展示完整的AndroidManifext.xml代码吗?

    感谢。

3 个答案:

答案 0 :(得分:2)

http://developer.android.com/reference/android/location/Location.html

查看distanceTo或distanceBetween。您可以从纬度和经度创建位置对象:

Location locationA = new Location("point A");

locationA.setLatitude(latA);
locationA.setLongitude(lngA);

Location locationB = new Location("point B");

locationB.setLatitude(latB);
locationB.setLongitude(lngB);

float distance = locationA.distanceTo(locationB);

private double gps2m(float lat_a, float lng_a, float lat_b, float lng_b) {
    float pk = (float) (180/3.14169);

    float a1 = lat_a / pk;
    float a2 = lng_a / pk;
    float b1 = lat_b / pk;
    float b2 = lng_b / pk;

    float t1 = FloatMath.cos(a1)*FloatMath.cos(a2)*FloatMath.cos(b1)*FloatMath.cos(b2);
    float t2 = FloatMath.cos(a1)*FloatMath.sin(a2)*FloatMath.cos(b1)*FloatMath.sin(b2);
    float t3 = FloatMath.sin(a1)*FloatMath.sin(b1);
    double tt = Math.acos(t1 + t2 + t3);

    return 6366000*tt;
}

答案 1 :(得分:1)

使用地理编码器获取地点1和地点的纬度和经度2.使用以下方法应用这些值。

Location.distanceBetween(startLatitude, startLongitude, endLatitude, endLongitude, results)

答案 2 :(得分:1)

您无需包含地图权限。

要获得2个位置之间的距离,您可以使用Geocoder类。这不应该是y位置权限。

Geocoder类有一个方法

getFromLocationName(String locationName, int maxResults)

返回位置输入的地址列表。地址有纬度/经度。

您需要将地址转换为Location对象,该对象具有计算2个位置之间距离的方法:

distanceTo(Location dest)
Returns the approximate distance in meters between this location and the given location.

至于你的第二个问题。您应该在活动中使用Fragments。阅读this以了解更多关于片段及其优点的内容。