我正在使用地理點的Android應用程序,我想從另一個地理座標點,距離(任何格式)和極角確定地理點。例如,我想在我的手機中獲取由GPS獲得的位置在北北(東經225度)處的100米的座標。從另一個距離,距離和極角確定地理位置
我發現的唯一方法是Location.distanceBetween(...)
。
我正在使用地理點的Android應用程序,我想從另一個地理座標點,距離(任何格式)和極角確定地理點。例如,我想在我的手機中獲取由GPS獲得的位置在北北(東經225度)處的100米的座標。從另一個距離,距離和極角確定地理位置
我發現的唯一方法是Location.distanceBetween(...)
。
看看大圓公式:http://en.wikipedia.org/wiki/Great-circle_distance
這應該給你如何計算距離的一些提示。
對於一個給定的距離和方位點,檢查http://williams.best.vwh.net/avform.htm#LL 這些公式看起來很複雜,但很容易實現;)
爲Android實現。此代碼非常適合您的應用中的單元測試:
public double radiansFromDegrees(double degrees)
{
return degrees * (Math.PI/180.0);
}
public double degreesFromRadians(double radians)
{
return radians * (180.0/Math.PI);
}
public Location locationFromLocation(Location fromLocation, double distance, double bearingDegrees)
{
double distanceKm = distance/1000.0;
double distanceRadians = distanceKm/6371.0;
//6,371 = Earth's radius in km
double bearingRadians = this.radiansFromDegrees(bearingDegrees);
double fromLatRadians = this.radiansFromDegrees(fromLocation.getLatitude());
double fromLonRadians = this.radiansFromDegrees(fromLocation.getLongitude());
double toLatRadians = Math.asin(Math.sin(fromLatRadians) * Math.cos(distanceRadians)
+ Math.cos(fromLatRadians) * Math.sin(distanceRadians) * Math.cos(bearingRadians));
double toLonRadians = fromLonRadians + Math.atan2(Math.sin(bearingRadians)
* Math.sin(distanceRadians) * Math.cos(fromLatRadians), Math.cos(distanceRadians)
- Math.sin(fromLatRadians) * Math.sin(toLatRadians));
// adjust toLonRadians to be in the range -180 to +180...
toLonRadians = ((toLonRadians + 3*Math.PI) % (2*Math.PI)) - Math.PI;
Location result = new Location(LocationManager.GPS_PROVIDER);
result.setLatitude(this.degreesFromRadians(toLatRadians));
result.setLongitude(this.degreesFromRadians(toLonRadians));
return result;
}
這應該是接受的答案 – Snake 2015-01-15 21:49:18
您是否實現了這個目標?你能與我們分享代碼嗎? :) – knagode 2013-07-09 10:16:59
我在工作中實現了這個項目。因此,我很抱歉地說我不能分享代碼。 – Black 2013-08-05 08:30:08
我已經在下面分享了我的代碼...我希望這會節省一些時間給更多的用戶;) – knagode 2013-08-05 09:11:07