如何使用LatLng在谷歌地图v2中以公里为单位获取两个地方之间的距离
Posted
技术标签:
【中文标题】如何使用LatLng在谷歌地图v2中以公里为单位获取两个地方之间的距离【英文标题】:how to get distance between two places in kilometer in google map v2 using LatLng 【发布时间】:2014-03-10 06:43:27 【问题描述】:在我的安卓应用程序中, 我必须计算用户当前位置与用户在地图上点击的点之间的距离。 我正在使用这个函数来计算:
public double CalculationByDistance(LatLng StartP, LatLng EndP)
int Radius=6371;//radius of earth in Km
double lat1 = StartP.latitude;
double lat2 = EndP.latitude;
double lon1 = StartP.longitude;
double lon2 = EndP.longitude;
double dLat = Math.toRadians(lat2-lat1);
double dLon = Math.toRadians(lon2-lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult= Radius*c;
double km=valueResult/1;
DecimalFormat newFormat = new DecimalFormat("####");
int kmInDec = Integer.valueOf(newFormat.format(km));
double meter=valueResult%1000;
int meterInDec= Integer.valueOf(newFormat.format(meter));
Log.i("Radius Value",""+valueResult+" KM "+kmInDec+" Meter "+meterInDec);
return Radius * c;
但是结果我的距离很长,例如。两个地方之间的距离只有大约 20 m,我的距离大约是 10947 公里。谁能帮帮我?
【问题讨论】:
【参考方案1】:android 提供了计算两个纬度/经度点之间距离的方法。
android.location.Location.distanceBetween(double startLatitude,
double startLongitude, double endLatitude, double endLongitude, float[] results)
【讨论】:
【参考方案2】:搜索有关 Haversine 方程。这是一种以米为单位返回距离的实现:
public static double haversine(double lat1, double lon1, double lat2, double lon2)
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return R * c;
其中 R = 6371000;
【讨论】:
【参考方案3】:使用这个方法:
private double distance(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 = rad2deg(dist);
dist = dist * 60 * 1.1515;
return (dist);
或者只是检查这个conversation
【讨论】:
你能提供deg2rad方法吗? 查看此链接***.com/questions/6981916/… ...【参考方案4】:以公里为单位的距离计算方法
public static double distanceKM(double lat1, double lon1, double lat2,
double lon2)
int EARTH_RADIUS_KM = 6371;
double lat1Rad = Math.toRadians(lat1);
double lat2Rad = Math.toRadians(lat2);
double deltaLonRad = Math.toRadians(lon2 - lon1);
double dist_travelled = Math
.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad)
* Math.cos(lat2Rad) * Math.cos(deltaLonRad))
* EARTH_RADIUS_KM;
dist_travelled = Double.parseDouble(new DecimalFormat("##.######")
.format(dist_travelled));
return dist_travelled;
【讨论】:
以上是关于如何使用LatLng在谷歌地图v2中以公里为单位获取两个地方之间的距离的主要内容,如果未能解决你的问题,请参考以下文章