2012-02-26 73 views
6

我正在使用地理点的Android应用程序,我想从另一个地理坐标点,距离(任何格式)和极角确定地理点。例如,我想在我的手机中获取由GPS获得的位置在北北(东经225度)处的100米的坐标。从另一个距离,距离和极角确定地理位置

我发现的唯一方法是Location.distanceBetween(...)

回答

1

看看大圆公式:http://en.wikipedia.org/wiki/Great-circle_distance

这应该给你如何计算距离的一些提示。

对于一个给定的距离和方位点,检查http://williams.best.vwh.net/avform.htm#LL 这些公式看起来很复杂,但很容易实现;)

+0

您是否实现了这个目标?你能与我们分享代码吗? :) – knagode 2013-07-09 10:16:59

+0

我在工作中实现了这个项目。因此,我很抱歉地说我不能分享代码。 – Black 2013-08-05 08:30:08

+0

我已经在下面分享了我的代码...我希望这会节省一些时间给更多的用户;) – knagode 2013-08-05 09:11:07

3

为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; 
} 
+2

这应该是接受的答案 – Snake 2015-01-15 21:49:18