Android 两点之间的距离
我有三种计算距离的方法,这三种方法都给出了不同的答案Android 两点之间的距离,android,map,Android,Map,我有三种计算距离的方法,这三种方法都给出了不同的答案 double lat = 6.924049; double lng = 79.853807; double lat1 = 6.856461; double lng1 = 79.912748; 如何计算两点之间的距离,以及如何按公里计算距离的百分比?还是电表 第一路ans=9.967441199417708E-6 float[] results = new float[1]; Location.distanc
double lat = 6.924049;
double lng = 79.853807;
double lat1 = 6.856461;
double lng1 = 79.912748;
如何计算两点之间的距离,以及如何按公里计算距离的百分比?还是电表 第一路ans=9.967441199417708E-6
float[] results = new float[1];
Location.distanceBetween(lat / 1E6, lng / 1E6, lat1 / 1E6, lng1 / 1E6,results);
float s =results[0] * 0.000621371192f;
String a2 = Float.toString(s);
第二路ans=6.1795527E6
double lat3 = lat / 1E6;
double lat2 = lat1 / 1E6;
double lon3 = lng / 1E6;
double lon2 = lng1 / 1E6;
double dLat = Math.toRadians(lat2 - lat3);
double dLon = Math.toRadians(lon2 - lon3);
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.atan2(Math.sqrt(a), Math.sqrt(1 - a));
// 6378.1 is gravity of earth
double asd = c * 6378.1;
第三路ans=6.176576174444191
{
double a5 = distance(lat, lng, lat1, lng1);
String a6 = Double.toString(a5);
}
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);
}
private double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
那么,如何计算两点之间的距离,以及如何以公里为单位计算距离的百分比?还是仪表? 使用distanceTo或distanceBetween方法。 你为什么不试试安卓的定位方法呢 可以从纬度和经度创建位置对象:
Location location = new Location("");
location.setLatitude(lat);
location.setLongitude(lon);
试试这个公式
double dist = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1- y2, 2));
或者转到此链接(更适合您的情况):
在计算巨大的圆形空间(地球)的距离时,无法找到准确的结果。你将有很多方法来寻找这样的距离。从你的问题来看,我建议你使用第二种或第三种方法,因为从我的观点来看,它们的结果是相当的(可能是几米以内的小距离) 为了我的个人发展,我使用你的第三种方法。对于精度,我在小数点后使用6位数字 例如,在您的情况下,6.176576174444191,我使用6.176576
double ER=3958.75;
double dlong=Math.toRadians(longitude1-longitude);
double dlat=Math.toRadians(latitude1-latitude);
a=(Math.sin(dlat/2)*Math.sin(dlat/2))+Math.cos(Math.toRadians(latitude))*Math.cos(Math.toRadians(latitude1))*Math.sin(dlong/2)*Math.sin(dlong/2);
c=2*Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
d=ER*c;
试试这个,它会给出以公里为单位的距离,或者用这个来检查。计算距离和更多,不会有问题
你可以和gradle一起使用
如何计算两点之间的距离,以及如何按公里计算距离的百分比?或米?返回此位置与给定位置之间的近似距离(以米为单位)。使用WGS84椭球体定义距离。6.176576174444191答案是什么?米?我怎样才能把它变成一个小数字呢?使用十进制格式,小数点后6位数字。问题是@Lucifer在谷歌地图中给出的距离约为12公里,而这里只给出了6.18米?@Loshi,这听起来有点误读耶,这是我的问题伙伴(和distance to和distance between给出另外两个不同的答案这是数学。hypot(x,y)你知道吗
dependencies {
compile 'com.google.maps.android:android-maps-utils:0.5+'
}
double distance = SphericalUtil.computeDistanceBetween(pointA, pointB);