2017-02-12 27 views
0

У меня есть текущее местоположение пользователя и конкретное место. Я пытаюсь дистанцироваться в милях. моя дистанция в милях кажется неправильной, я получил 1,1 мили в своем приложении, затем я проверил мили на карте Google. Я получил 3,4 мили на карте Google. Вот мой код, я не уверен, почему мой код не является точным. Пожалуйста помоги.Мое расстояние в расчетах миль кажется неправильным в swift 3

var locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    map.delegate = self 
    map.userTrackingMode = MKUserTrackingMode.follow 

    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.startUpdatingLocation() 

    // set location 
    let latitude: CLLocationDegrees = 32.5850 
    let longitude: CLLocationDegrees = -85.4904 
    let latDelta: CLLocationDegrees = 0.05 
    let lonDelta: CLLocationDegrees = 0.05 
    let span: MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta) 
    let coordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
    let region = MKCoordinateRegion(center: coordinates, span: span) 

    map.setRegion(region, animated: true) 

    // add annotation 
    let annotation = MKPointAnnotation() 
    annotation.title = "1100 S College St" 
    annotation.coordinate = coordinates 

    map.addAnnotation(annotation) 

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    let userLocation: CLLocation = locations[0] 
    let latitude = userLocation.coordinate.latitude 
    let longitude = userLocation.coordinate.longitude 

    let location1 = CLLocation(latitude: 32.5850, longitude: -85.4904) // set location 

    let location2 = CLLocation(latitude: latitude, longitude: longitude) // user's current location 

    let distanceInMeters : CLLocationDistance = location1.distance(from: location2) // distance in meters 

    let distanceInMiles = distanceInMeters/1609.344 // distance in miles 

    let roundUp = String(format:"%.1f", distanceInMiles) // round up 

    distanceLabel.text = "\(roundUp) mi" 

} 

ответ

0

Эта часть является правильным:

let distanceInMiles = distanceInMeters/1609.344 // distance in miles 

Проверить расстояние в метрах и сравните с Google Maps. Если вы находитесь в iOS 10 вы можете использовать новые Measurement и связанные с ним классы, как это:

let meters = 1000.0 

let distanceMeters = Measurement(value: meters, unit: UnitLength.meters) 

let distanceMiles = distanceMeters.converted(to: UnitLength.miles) 
let miles = distanceMeters.converted(to: UnitLength.miles).value 

Этот код производит эти результаты: enter image description here

+0

Привет, я просто проверил мое расстояние в метрах и километре и сравнил с Google Maps. У меня разное число. Я не уверен, где я ошибся, когда получаю дистанцию? – QQ10

+0

Проверьте расстояние с точными координатами для 'location1' и' location2' на 'iOS' и' Google Maps' – mhergon

+0

Я только что проверил координаты location1 и location2. Я думаю, что координаты, отображаемые на карте google, не так точны. Потому что когда я копирую точно координаты и применяю к моему приложению. Я получил 3,1 мили в своем приложении. (Тот же номер, который я получил на карте Google). Но местоположение1 (значок location1) и location2 (местоположение пользователя) не отображается правильно в моем приложении. Есть ли хороший способ проверить, есть ли у меня правильная координата? – QQ10

0

Swift 4, XCode9

extension CLLocation { 

    func myDistance(coordinate: CLLocation)->String{ 

     let distanceInMeters = self.distance(from: coordinate) 

     if distanceInMeters < 1000 { 
      return distanceInMeters.description + " M" 
     }else{ 
      let distanceInKilometer = distanceInMeters/1000 
      return String(format:"%.1f", distanceInKilometer) + " KM" 
     } 

    } 

}