无法在两个地方之间获得完美的距离

Posted

技术标签:

【中文标题】无法在两个地方之间获得完美的距离【英文标题】:Not able to get perfect distance between two places 【发布时间】:2016-02-04 12:21:20 【问题描述】:

我使用Haversine 计算两个位置之间的距离。

public static class Haversine 

    static int Radius = 6371;
    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.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;

        /*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.asin(Math.sqrt(a));

        return R * 2 * Math.asin(Math.sqrt(a));*/
    




从上面的代码中,我无法获得 2 个位置之间的准确距离。

当我运行上述方法时,它会从我的两个地方显示4.32 km,但是当我检查google map 时,它会显示5.3 km

我也使用了Location.distanceBetween 方法,但它仍然显示4.32 km

我怎样才能得到位置之间的确切距离?

【问题讨论】:

看看***.com/questions/1502590/… 我已经看到了。在此基础上实施。 我猜上面的公式会计算位移而不是距离。您可以使用谷歌地图距离矩阵 API。 developers.google.com/maps/documentation/distance-matrix/intro 【参考方案1】:

你可以看到这个link。 Haversine 和 Location.distanceBetween 方法都是线的原点。 因此,您可以使用 http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=false 来获取实际距离。

【讨论】:

哦...所以Haversine 不准确。但是我如何在android 中使用它? 这不是获取距离的正确方法取决于谷歌最新的文档。这不会一直对你有用..developers.google.com/maps/documentation/distance-matrix/intro【参考方案2】:

来自谷歌官方仓库link

SphericalUtil

MathUtil

用法

 double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00));

上述方法将返回两个 LatLng 之间的距离,以米为单位。 或者试试这个

private String getDistance(LatLng my_latlong,LatLng frnd_latlong)
 Location l1=new Location("One");
 l1.setLatitude(my_latlong.latitude);
 l1.setLongitude(my_latlong.longitude);

 Location l2=new Location("Two");
 l2.setLatitude(frnd_latlong.latitude);
 l2.setLongitude(frnd_latlong.longitude);

 float distance=l1.distanceTo(l2);
 String dist=distance+" M";

  if(distance>1000.0f)
   
     distance=distance/1000.0f;
     dist=distance+" KM";
   

 return dist;


或者你可以看看link

【讨论】:

以上是关于无法在两个地方之间获得完美的距离的主要内容,如果未能解决你的问题,请参考以下文章

如何获得两个地方之间的准确或(接近准确)距离? mysql/php

如何通过地图API获得任意两个地点的距离

计算两个 GPS 坐标之间的距离

怎么查两个地方的距离?

如何在postgres中获得两个向量之间的余弦距离?

计算Excel表格中两个地方之间的地理坐标距离