2014-02-26 22 views
0

我得到了緯度&點的經度。我希望所有的緯度爲&經度的讀數相對於給定的點在500M的半徑內。是什麼方法呢?可能嗎?是他們的任何算法嗎?創建用戶定義地理柵欄的算法

+0

簡短的回答:沒有可用這樣的方法,在目前。 – Kedarnath

+0

爲什麼不使用Geofence api android –

+0

完整的解決方案是在https://developer.android.com/training/location/geofencing.html –

回答

1

有可用來計算距離的兩個緯度/長點之間(它不會確切由於海拔變化,但非常接近),並從指定點篩選基於距離的樣本點很多公式。

的什麼可用的(數學與和源代碼)一個很好的概述,請訪問:http://www.movable-type.co.uk/scripts/latlong.html

瀏覽過那裏,選擇適合您需求的最佳距離公式。

+0

您鏈接了我最喜歡的網站以解決此問題;和關於高度錯誤的觀點是不錯的... – Floris

0

這裏是在計算器上的解決方案尋找兩個地點之間的距離,通過烏斯曼庫爾德

https://stackoverflow.com/a/14394403/2128327

有小調整

因此,我們可以使用他的功能:

public double getKmDistance(GeoPoint StartP, GeoPoint EndP) { 
    int Radius=6371;//radius of earth in Km   
    double lat1 = StartP.getLatitudeE6()/1E6; 
    double lat2 = EndP.getLatitudeE6()/1E6; 
    double lon1 = StartP.getLongitudeE6()/1E6; 
    double lon2 = EndP.getLongitudeE6()/1E6; 
    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("####"); 
    kmInDec = Integer.valueOf(newFormat.format(km)); 
    meter=valueResult%1000; 
    meterInDec= Integer.valueOf(newFormat.format(meter)); 
    Log.i("Radius Value",""+valueResult+" KM "+kmInDec+" Meter "+meterInDec); 

    return kmInDec; 
} 

再拿說你有一個地點清單:

ArrayList<GeoPoint> geoPoints = new ArrayList<GeoPoint>(); 

,我們有我們當前的位置:

GeoPoint currentLocation = new GeoPoint(..); 

,那麼你可以這樣做:

ArrayList<GeoPoint> within500Km = new ArrayList<GeoPoint>(); 

for (GeoPoint g : geoPoints) 
    if (getKmDistance(currentLocation, g) <= 500.0) 
     within500Km.add(g); 

for(GeoPoint g : within500Km) 
    System.out.println("> "+g.getLatitudeE6()+" : "+g.getLongitudeE6()+" "); 
+0

謝謝@khaled我會嘗試嗎? –

+0

@NaVaNeeThPrOdHutuR我的代碼使用500公里,你可以改變它 –

+0

從一個真正的評論的答案更多信息:我在這裏發佈鏈接,因爲鏈接不工作的評論。 https://developer.android.com/training/location/geofencing.html –