根据起点,方位和距离计算新纬度和经度的计算?

时间:2013-05-31 04:57:33

标签: iphone objective-c geolocation location

有没有人有计算新的计算 纬度和经度基于起点,轴承和 距离是多少?

我非常感谢人们可能提供的任何帮助。

2 个答案:

答案 0 :(得分:4)

我使用了Calculate new coordinate x meters and y degree away from one coordinate中的代码:

- (CLLocationCoordinate2D)coordinateFromCoord:(CLLocationCoordinate2D)fromCoord
                                 atDistanceKm:(double)distanceKm
                             atBearingDegrees:(double)bearingDegrees
{
    double distanceRadians = distanceKm / 6371.0;
    //6,371 = Earth's radius in km
    double bearingRadians = [self radiansFromDegrees:bearingDegrees];
    double fromLatRadians = [self radiansFromDegrees:fromCoord.latitude];
    double fromLonRadians = [self radiansFromDegrees:fromCoord.longitude];

    double toLatRadians = asin(sin(fromLatRadians) * cos(distanceRadians)
                               + cos(fromLatRadians) * sin(distanceRadians) * cos(bearingRadians) );

    double toLonRadians = fromLonRadians + atan2(sin(bearingRadians)
                                                 * sin(distanceRadians) * cos(fromLatRadians), cos(distanceRadians)
                                                 - sin(fromLatRadians) * sin(toLatRadians));

    // adjust toLonRadians to be in the range -180 to +180...
    toLonRadians = fmod((toLonRadians + 3*M_PI), (2*M_PI)) - M_PI;

    CLLocationCoordinate2D result;
    result.latitude = [self degreesFromRadians:toLatRadians];
    result.longitude = [self degreesFromRadians:toLonRadians];

    return result;
}

- (double)radiansFromDegrees:(double)degrees
{
    return degrees * (M_PI/180.0);
}

- (double)degreesFromRadians:(double)radians
{
    return radians * (180.0/M_PI);
}

答案 1 :(得分:0)

您可以在http://www.movable-type.co.uk/scripts/latlong.html

找到您可能想要的所有计算(包括解释等)

您需要的代码(在JavaScript中)标题为“目标点给定距离和从起点承载”。摘录:

var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R) + 
          Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) );
var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
                 Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));

其中R =地球半径,d =距离(以相同单位表示),纬度/经度以弧度表示(因为这是sin函数所期望的)。你用

从度数到弧度
radians = pi * degrees / 180;

你应该可以从这里拿走它。请查看我提供的链接以获取更多信息。