2016-02-01 4 views
2

Предположим, у меня есть две точки:Учитывая два набора координат, как рассчитать расстояние между ними?

var lat1 = 37.7833 
var lon1 = -122.4167 
var lat2 = 39.4811 
var lon2 = -118.9558 

Как можно вычислить расстояние между ними, самый простой способ? (С учетом кривизны Земли)

Я посмотрел в this ответ, но CCLocation не имеет инициализатор в Swift 2.0

+0

Посмотрите на этот ответ http://stackoverflow.com/a/34417444/742298 –

+0

* «CCLocation не имеет инициализатор в Swift 2.0» * - это не правильно. Просто введите 'CCLocation (' в исходном файле Xcode и просмотрите автозаполнение сделать свою магию. Или найдите [документацию] (https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocation_Class/#// apple_ref/occ/instm/CLLocation/initWithLatitude: longitude :). Также в вашем ответе Q & A http://stackoverflow.com/questions/22795059/calculating-distance-between-two-coordinates-using-cullocation есть ответ с использованием языка Swift –

ответ

4
let coord1 = CLLocation(latitude: 37.7833, longitude: -122.4167) 
let coord2 = CLLocation(latitude: 39.4811, longitude: -118.9558) 
let distance = coord1.distanceFromLocation(coord2) 

print("the distance between the two points is: \(distance) meters") 
+0

Спасибо, это то, что я искал. Как превратить расстояние в значение с плавающей точкой? Также я попытался поместить float в аргументы, но он не работает. – TIMEX

+0

distance - это '' 'CLLocationDistance '' ', который является typealias для' '' Double'''. для преобразования в float вы '' 'let floatDistance = Float (distance)' '' – Casey

+0

'' 'let floatValue: Float = 37.7833''' '' 'let degreesValue = CLLocationDegrees (floatValue)' '' – Casey

1

Я использовал это и отлично работает для меня: -

static let DEG_TO_RAD = 0.017453292519943295769236907684886 
static let EARTH_RADIUS_IN_METERS = 6372797.560856 

static func calculateDistance(fromlat : Double, fromlon : Double, tolat : Double, tolon : Double) -> Double { 


    let latitudeArc : Double = (fromlat - tolat) * DEG_TO_RAD 
    let longitudeArc : Double = (fromlon - tolon) * DEG_TO_RAD 
    var latitudeH : Double = sin(latitudeArc * 0.5) 
    latitudeH *= latitudeH 
    var lontitudeH : Double = sin(longitudeArc * 0.5) 
    lontitudeH *= lontitudeH 
    let tmp : Double = cos(fromlat*DEG_TO_RAD) * cos(tolat*DEG_TO_RAD) 
    return EARTH_RADIUS_IN_METERS * 2.0 * asin(sqrt(latitudeH + tmp*lontitudeH)) 


} 
+0

Do эти счетчики? – TIMEX

+0

Да .. вы использовали его, и было ли это полезно –

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