Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 两点之间的距离_Android_Map - Fatal编程技术网

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);