计算两个地理位置之间的距离

请说明这种情况

现在我有两个arrays有经度和纬度的附近的地方,也有用户位置latiude和longiude现在我想计算用户的位置和附近的地方之间的距离,并希望在列表视图中显示它们。

我知道有一种计算距离的方法

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results); 

现在问题是如何通过这个方法中的这两个具有邻近纬度和长度的数组并获得距离数组。

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

看看distanceTo或distanceBetween。 您可以从经度和纬度创build一个Location对象:

 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 meterDistanceBetweenPoints(float lat_a, float lng_a, float lat_b, float lng_b) { float pk = (float) (180.f/Math.PI); float a1 = lat_a / pk; float a2 = lng_a / pk; float b1 = lat_b / pk; float b2 = lng_b / pk; double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2); double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2); double t3 = Math.sin(a1) * Math.sin(b1); double tt = Math.acos(t1 + t2 + t3); return 6366000 * tt; } 

试试这个代码。 这里我们有两个经度和纬度值,而selected_location.distanceTo(near_locations)函数返回这些地方之间的距离,以米为单位。

 Location location1=new Location("locationA"); near_locations.setLatitude(17.372102); near_locations.setLongitude(78.484196); Location location2=new Location("locationA"); near_locations.setLatitude(17.375775); near_locations.setLongitude(78.469218); double distance=selected_location.distanceTo(near_locations); 

这里“距离”是位置1和位置2之间的距离(以米为单位)

只有一个用户位置,所以你可以迭代列表的附近的地方可以调用distanceTo()函数来获得距离,你可以存储在一个数组,如果你喜欢。

据我所知, distanceBetween()是为了遥远的地方,它的输出是一个WGS84椭圆体。

  private static Double _MilesToKilometers = 1.609344; private static Double _MilesToNautical = 0.8684; /// <summary> /// Calculates the distance between two points of latitude and longitude. /// Great Link - http://www.movable-type.co.uk/scripts/latlong.html /// </summary> /// <param name="coordinate1">First coordinate.</param> /// <param name="coordinate2">Second coordinate.</param> /// <param name="unitsOfLength">Sets the return value unit of length.</param> public static Double Distance(Coordinate coordinate1, Coordinate coordinate2, UnitsOfLength unitsOfLength) { double theta = coordinate1.getLongitude() - coordinate2.getLongitude(); double distance = Math.sin(ToRadian(coordinate1.getLatitude())) * Math.sin(ToRadian(coordinate2.getLatitude())) + Math.cos(ToRadian(coordinate1.getLatitude())) * Math.cos(ToRadian(coordinate2.getLatitude())) * Math.cos(ToRadian(theta)); distance = Math.acos(distance); distance = ToDegree(distance); distance = distance * 60 * 1.1515; if (unitsOfLength == UnitsOfLength.Kilometer) distance = distance * _MilesToKilometers; else if (unitsOfLength == UnitsOfLength.NauticalMiles) distance = distance * _MilesToNautical; return (distance); } 

distanceTo会给你两个给定位置之间的距离(以米为单位)ej target.distanceTo(目的地)。

distanceBetween也给你的距离,但它将存储的距离浮点数组(结果[0])。 该文档说如果结果长度大于或等于2,则初始方位将存储在结果[1]中。 如果结果长度大于或等于3,则最终方位将存储在结果中[2]

希望这有助于

我用距离来得到从A点到B点的距离,我认为这是要走的路。

 public double distance(Double latitude, Double longitude, double e, double f) { double d2r = Math.PI / 180; double dlong = (longitude - f) * d2r; double dlat = (latitude - e) * d2r; double a = Math.pow(Math.sin(dlat / 2.0), 2) + Math.cos(e * d2r) * Math.cos(latitude * d2r) * Math.pow(Math.sin(dlong / 2.0), 2) double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double d = 6367 * c; return d; }