2015-04-03 6 views
1

Я хочу рассчитать подшипник между двумя местоположениями в Свифт. Я пробовал код, но он не работает. Я искал эту проблему, но я не нашел никакого результата.Рассчитать подшипник между двумя точками

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 является:

(не может ссылаться на '-' со списком аргументов типа '((),()))

+0

возможно дубликат [Расчет подшипника между двумя точками CLLocation в Swift] (http://stackoverflow.com/questions/26998029/calculating-bearing-between-two-cllocation-points-in-swift) – Moritz

+0

я попробуйте это, но не сработайте (Расчет подшипника между двумя точками CLL в Swift [duplicate]) – user3432650

+1

Код не имеет смысла. Есть оператор return, но func не говорит, что он вернет значение. Зачем вам объявлять переменные широты и долготы как кортежи, а затем пытаться сделать арифметику (вычитание) на них? Вместо того, чтобы говорить «не работать», вы должны сказать, что произошло с ошибкой или проблемой _exact_, поскольку существует множество способов, с помощью которых вещи могут «не работать». – Anna

ответ

0

По сравнению с CLLocation Category for Calculating Bearing w/ Haversine function , ваш dlon отличается. Этот ответ имеет

let dlon = targetedPointlongitude - lonuserlocatioc 

Я не знаю, если это ваша проблема, но это выглядит странно.

+0

Accualy i конвертирует этот код из кода javascript. Где нечетная точка? Если вы дадите мне подробную информацию, я могу ее отредактировать. Я проверяю вашу ссылку, это похоже на меня. Может быть, я не вижу разницы. –

+0

Код по ссылке, которую я дал, имеет dlon, равный -1 раз по коду в вопросе выше. – emrys57

-2

Быстрая функция, подобная этому;

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; 
} 
+0

@ EricAya ok Я преобразую и отредактирую свой ответ через пару часов. Извините за эту ситуацию. –

+0

@ EricAya преобразуется в быстрый и обновленный ответ. –

Смежные вопросы