簡體   English   中英

在 Google Maps v2 上計算當前位置和標記之間的距離

[英]Calculate Distance between Current Location and Marker on Google Maps v2

我是新來的...請幫助我

我想開發計算用戶當前位置和標記之間距離的 android 應用程序。 當用戶觸摸制造商時,它將計算距離。 我想使用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;
 }

公式接受的參數屬於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 是終點的坐標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM