2011-05-18 46 views
3

這可能是一個noob問題,但我不是100%肯定它。地理點vs地點

我怎樣才能使用地理點的位置對象?我想用它來獲得兩點之間的距離。 我已經找到了一個線程,它說

Location loc1 = new Location("Location"); 
loc.setLatitude(geoPoint.getLatitudeE6); 
loc.setLongitude(geoPoint.getLongitudeE6); 

Location loc2 = new Location("Location2"); 
loc2.setLatitude(geoPoint.getLatitudeE6); 
loc2.setLongitude(geoPoint.getLongitudeE6); 

,然後我會用distanceTo()來獲得兩點之間的距離。我的問題 Providername的用途是什麼? ...新的位置(「這裏是什麼???」) 所以我必須在之前定義一個提供程序或什麼? 我想在for()中使用這段代碼來在更多的GeoPoint之間傳播。 順便說一句 - 我必須將E6值轉換回正常?

+0

提供者是GPS或網絡... GPS是準確的,但可能需要一些時間和網絡相反它......是的,你必須設置一個供應商獲得GPS固定。 – Farhan 2011-05-18 06:25:41

回答

2

不完全是

loc.setLatitude()採用雙緯度。所以正確的代碼是:

loc.setLatitude(geoPoint.getLatitudeE6()/1E6); 

Location()構造函數採用所使用的GPS提供程序的名稱。它可以是LocationManager.GPS_PROVIDER或NETWORK_PROVIDER等值

+0

好,所以我需要定義一個位置管理器之前 - 或者我可以直接將這個「LocationManager.GPS_PROVIDER」添加到括號,如「位置loc =新位置(LocationManager.GPS_PROVIDER)'? – user758610 2011-05-18 06:57:18

+0

是的,你不需要LocationManager。是的,這就是你如何做到的。 – Reno 2011-05-18 07:18:34

+0

好大thx;)。現在我知道所有我想知道的。 – user758610 2011-05-18 07:26:06

0

要獲得兩點之間的距離,可以使用Location類,更確切地說,使用distanceBetween靜態方法。

該文檔是它做什麼,但這裏一個快速的代碼示例很清楚:

float[] results = new float[3]; 
Location.distanceBetween(destLatitude, destLongitude, mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude(), results); 
// result in meters, convert it in km 
String distance = String.valueOf(Math.round(results[0]/1000)) + " km"); 

從分鐘轉換/秒學位可以使用位置類的convert方法。

+0

這真是太神奇了,謝謝! – user758610 2011-05-18 15:24:13

+0

如果答案適合您,請將您的問題標記爲已解決。 – 2011-05-20 11:58:31

1
Log.i("MapView", "Map distance to mark (in meters): " + myLocation.distanceTo(GeoToLocation(point)) + "m"); 

然後

public Location GeoToLocation(GeoPoint gp) { 
     Location location = new Location("dummyProvider"); 
     location.setLatitude(gp.getLatitudeE6()/1E6); 
     location.setLongitude(gp.getLongitudeE6()/1E6); 
     return location; 
    }