计算两个位置之间的方位角

Posted

技术标签:

【中文标题】计算两个位置之间的方位角【英文标题】:Calculate bearing between two locations 【发布时间】:2015-04-03 12:01:34 【问题描述】:

我想计算 Swift 中两个位置之间的方位角。我尝试了一些代码,但它不起作用。我搜索了这个问题,但没有找到任何结果。

func calculat(userlocation:CLLocation)

    let latuserlocation: () = DegreesToRadians(userlocation.coordinate.latitude)

    let lonuserlocatioc: () = DegreesToRadians(userlocation.coordinate.longitude)


    latitude = NSString (string: places[activePlace]["lat"]!).doubleValue

    longitude = NSString (string: places[activePlace]["lon"]!).doubleValue


    let targetedPointLatitude: () = DegreesToRadians(latitude)

    let targetedPointlongitude: () = DegreesToRadians(longitude)


    let dlon = lonuserlocatioc  - targetedPointlongitude


    let y = sin(dLon) * cos(targetedPointLatitude);

    let x = cos(latuserlocation) * sin(targetedPointLatitude) - sin(latuserlocation) * cos(targetedPointLatitude) * cos(dLon);

    let radiansBearing = atan2(y, x);

return RadiansToDegrees(radiansBearing)

let dlon = lonuserlocatioc - targetedPointlongitude 的错误是:

(不能使用类型为“((),())”的参数列表调用“-”)

【问题讨论】:

Calculating bearing between two CLLocation points in Swift 的可能重复项 我尝试了这个但不起作用(在 Swift [重复] 中计算两个 CLLocation 点之间的方位) 代码没有意义。有一个 return 语句,但 func 没有说它会返回一个值。为什么要将纬度和经度变量声明为元组,然后尝试对它们进行算术(减法)?与其说“不工作”,不如说确切的错误或问题是什么,因为有无数种方法可能会“不工作”。 【参考方案1】:

与CLLocation Category for Calculating Bearing w/ Haversine function 相比,您的dlon 不同。这个答案有

let dlon = targetedPointlongitude - lonuserlocatioc

我不知道这是否是你的问题,但它看起来很奇怪。

【讨论】:

我准确地从 javascript 代码转换此代码。奇点在哪里?如果你给我详细的信息,我可以编辑它。我检查了你的链接,对我来说看起来一样。也许我看不出区别。 我给出的链接中的代码的 dlon 等于上述问题中代码的 -1 倍。【参考方案2】:

这样的Swift函数;

func radians(n: Double) -> Double
    return n * (M_PI / 180);


func degrees(n: Double) -> Double
    return n * (180 / M_PI);


func logC(val:Double,forBase base:Double) -> Double 
    return log(val)/log(base);


func getBearing(startLat: Double,startLon:Double,endLat: Double,endLon: Double) -> Double
    var s_LAT: Double , s_LON: Double, e_LAT: Double, e_LON: Double, d_LONG: Double, d_PHI: Double;

    s_LAT = startLat;
    s_LON = startLon;
    e_LAT = endLat;
    e_LON = endLon;

    d_LONG = e_LON - s_LON;

    d_PHI = logC(tan(e_LAT/2.0+M_PI/4.0)/tan(s_LAT/2.0+M_PI/4.0),forBase :M_E);
    if (abs(d_LONG)>M_PI)
        if(d_LONG>0.0)
            d_LONG = -(2.0 * M_PI - d_LONG);
        else
            d_LONG = (2.0 * M_PI - d_LONG);
        
    
    return degrees(atan2(d_LONG, d_PHI)+360.0)%360.0;

【讨论】:

@EricAya 好的,我将在几个小时后转换并编辑我的答案。很抱歉出现这种情况。

以上是关于计算两个位置之间的方位角的主要内容,如果未能解决你的问题,请参考以下文章

计算两个 GPS 坐标之间的罗盘方位问题

android - 如何获得两个位置之间的方位度?

计算两个 CLLocationCoordinate2D 位置之间的偏移量

如何两个WGS84坐标之间计算方位角(角向北)

计算两个纬度坐标之间的距离/方位

Python:计算两个纬度/经度之间的方位