2012-09-29 109 views
0

我正在開發一個Android應用程序,我擁有一個地理點的經度和緯度,我想獲得位於X米(北)和Y米(西)。 GeoPoint沒有實現這種功能,所以我必須找到一種方法來自己做...從一個地理位置的距離獲取位置

我做了一些搜索,但我沒有發現任何有趣的事情,你有什麼想法如何繼續?

回答

1

通過以下方法,您將獲得經緯度添加到原始位置以進入最後一個位置。請記住,這隻適用於相對較小的距離,因爲它忽略了地球曲率。

private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters 
private float results[] = new float[1]; 

private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){ 
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results); 
    double factorX = GAP_LAT_LON/results[0]; 
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results); 
    double factorY = GAP_LAT_LON/results[0]; 
    if(gaps == null) 
     gaps = new PointF(); 
    gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY)); 
    return gaps; 
} 

//to use 
private void teste(){ 
    PointF gaps = null; 
    Location initial = new Location(""); 

    initial.setLatitude(23.5); 
    initial.setLongitude(13.2); 

    //100 meters West/East and 300 meters North/South 
    getGaps(initial, 100, 300, gaps); 

    //gaps.x returns x offset to add/subtract to initial latitude 
    //gaps.y returns y offset to add/subtract to initial longitude 
} 

好運

+0

由於它似乎工作,雖然不是很精確的:) – lost17

+0

你可以調整它選擇一個值GAP_LAT_LON更接近到您正在使用的距離值。如果您將差距作爲雙精度返回,還可以提高精度,但是由於PointD(double)不存在,因此您必須定義自己的類。 – Luis

2

棘手的,因爲兩個完整的經度之間的距離取決於緯度,和距離也取決於海拔...

爲了使事情變得簡單,我想嘗試和猜測的經度和緯度,以及檢查猜測和原點之間的距離。這很容易,因爲兩點之間的getting the distance已經完成。

從一個座標軸開始,進行一種二分查找,直到找到X米的位置爲止。然後對另一個軸執行相同的操作。