在 Google Maps v2 上计算当前位置和标记之间的距离

Posted

技术标签:

【中文标题】在 Google Maps v2 上计算当前位置和标记之间的距离【英文标题】:Calculate Distance between Current Location and Marker on Google Maps v2 【发布时间】:2015-05-03 15:54:48 【问题描述】:

我是新来的...请帮助我

我想开发一个计算用户当前位置和标记之间距离的安卓应用程序。当用户触摸制造商时,它将计算距离。我想使用 Haversine 公式,但我不知道如何将当前位置和标记坐标输入到公式中...例如 StartP 将是我当前的位置坐标,而 EndP 将是我的标记坐标。

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;
 

【问题讨论】:

您的图片没有显示在我们的最后。 我已经编辑了帖子...请帮助我 【参考方案1】:

公式接受的参数类型为LatLng。现在您还没有指定代码中的任何位置。 但是在函数本身你会发现你给函数的只是起点和终点的经纬度。因此,如果您在为此函数提供输入时遇到困难,您可以这样做。 该函数需要双精度值形式的纬度和经度。您从地图中得到的是纬度和经度的双重值。 所以,你可以像这样直接将它们传递给这个函数。

public double CalculationByDistance(double latitude1, double longitude1, double latitude2, double longitude2) 
        int Radius=6371;//radius of earth in Km         
        double lat1 = latitude1;
        double lat2 = latitude2;
        double lon1 = longitude1;
        double lon2 = longitude2;
        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("####");
        Integer kmInDec =  Integer.valueOf(newFormat.format(km));
        double meter=valueResult%1000;
        Integer  meterInDec= Integer.valueOf(newFormat.format(meter));
        System.out.println("Radius Value "+valueResult+"   KM  "+kmInDec+" Meter   "+meterInDec);

        return Radius * c;
     

其中latitude1longitude1 是起点的坐标,2 是终点的坐标。

【讨论】:

重复的问题,但是,试试这个。 [链接][1] [1]:developer.android.com/reference/android/location/… 如何将当前位置和标记位置传递给函数???我还是不明白... 你从上面的回答中没有得到什么? 我不明白该函数将如何获取我当前的位置和标记坐标。我应该如何将这些值传递给函数?我是android开发的新手,所以我不太明白.. 你实现了使用maps api的一部分吗?手机定位??请先实施。 Haversine 排在最后执行。为此,谷歌需要做一些事情并遵循官方文档

以上是关于在 Google Maps v2 上计算当前位置和标记之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google Maps v2 上将标记添加到当前位置?

Google Maps v2 上的动画标记

将相机重定向到当前位置 Google Maps API v2

Android Google Maps V2 当前位置 纬度 经度 NullPointerException

在 Android google maps api v2 for 4.0 中,显示从当前位置到给定纬度的路线

Android- Google Maps V2:跟踪从当前位置到另一个目的地的路线