首頁>Program>source

我想製作一个可以檢查使用者最近位置的應用程式.我可以轻松获取使用者的位置,並且已经有了一个经度和纬度的位置列表。

相對於当前使用者位置,知道列表最近位置的最佳方法是什麼.

我在google API中找不到任何內容.

最新回復
  • 5月前
    1 #

    Location loc1 = new Location("");
    loc1.setLatitude(lat1);
    loc1.setLongitude(lon1);
    Location loc2 = new Location("");
    loc2.setLatitude(lat2);
    loc2.setLongitude(lon2);
    float distanceInMeters = loc1.distanceTo(loc2);
    

    參考:http://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location)

  • 5月前
    2 #

    http://developer.android.com /reference/android/location/Location.html

    查看distanceTo或distanceBetween.您可以根据经纬度建立位置物件:

    Location location = new Location("");
    location.setLatitude(lat);
    location.setLongitude(lon);
    

  • 5月前
    3 #

    一个近似解(基於等角投影), much faster (只需要1个trig和1个平方根)。

    如果您的點相距不太远,則此近似值很重要.它將 always over-estimate 相對於實際的haversine距离.例如,它將添加 no more than 0.05382 % 到實際距离(如果您的两點之間有经纬度或经度差)

    標準公式(Haversine)是 does not exceed 4 decimal degrees 一个(也就是說,它適用於地球上任何经度/纬度的夫妇),但是是 exact 因為它需要7个三角和2个平方根.如果您的两點相距不太远,並且绝對精度不是最重要的,則可以使用此近似版本(Equirectangular),因為它仅使用一个三角和一个平方根,因此速度要快得多。

    much slower
    

    您可以 // Approximate Equirectangular -- works if (lat1,lon1) ~ (lat2,lon2) int R = 6371; // km double x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2); double y = (lat2 - lat1); double distance = Math.sqrt(x * x + y * y) * R; 通過以下任一方式:

    optimize this further 如果您只是簡單地將距离与另一个距离进行比较(在這種情况下,請比较两个平方距离);

    Removing the square root 如果您計算从一个主點到许多其他點的距离(在這種情况下,您將以该主點為中心进行等角投影,那麼您可以為所有比较計算一次餘弦)。

    有關更多資訊,請參见:http://www.movable-type.co.uk/scripts/latlong.html

    在以下几種語言中可以很好地參考Haversine公式的參考實現:http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe

  • 5月前
    4 #

    您可以使用两種方法,但是 要確定哪一个最好,我们首先需要知道您是否知道使用者的高度以及其他點的高度吗?

    根据您追求的準確性水平,您可以研究Haversine或Vincenty公式...

    這些頁面详细介绍了公式,並且對於數學上不太類似的人也提供了如何在指令碼中實現它们的說明!

    Haversine公式:http://www.movable-type.co.uk/scripts/latlong.html

    Vincenty公式:http://www.movable-type.co.uk/scripts/latlong-vincenty.html

    如果您對公式中的任何含義有任何疑問,只需註釋一下,我会尽力迴答這些問题:)

  • 5月前
    5 #

    有两種方法可以使LatLng之間保持距离。< / p>

    Factoring-out the cosine
    

    看到這个

    第二

    public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results) 如praveen迴答。

    public float distanceTo (Location dest)

相似問題

  • sqlite:Android中的全文字搜尋示例
  • ruby on rails:將omniauth facebook登錄名變成弹出視窗