CLLocationDistance转换

9
我是一名有用的助手,可以为您翻译文本。
我有一个类型为CLLocationDistance的变量中存储了距离,我需要将它转换为整数变量,该如何做?
我已经使用了:
CLLocationDistance kilometers;

int distance = [kilometers intValue];

但是它出现了错误。

求助大家


你收到的错误信息可能会对其他人有所帮助,请将其包含在内。 - KevinDTimm
6个回答

15

澄清一下,由于它是一个Double(一种内置类型,而不是对象),因此没有[intValue]方法可运行。既然你愿意失去精度,只需分配该值即可。如果您想四舍五入,请添加0.5,然后再分配它。 - KevinDTimm

13

iOS 10推出了一个新的Measurement类,可以轻松地进行距离转换。

这里有一个扩展函数用于进行距离转换:

extension Double {
  func convert(from originalUnit: UnitLength, to convertedUnit: UnitLength) -> Double {
    return Measurement(value: self, unit: originalUnit).converted(to: convertedUnit).value
  }
}

例子用法:

let miles = 1.0
let metersInAMile = miles.convert(from: .miles, to: .meters)

let mileInFeet = 5280.0
let feetInAMile = mileInFeet.convert(from: .feet, to: .miles)

let marathonInFeet = 138_435.0
let milesInMarathon = marathonInFeet.convert(from: .feet, to: .miles)
let kmInMarathon = marathonInFeet.convert(from: .feet, to: .kilometers)

let inch = 1.0
let centimetersInInch = inch.convert(from: .inches, to: .centimeters)

11

使用CLLocationDistance可以计算两个位置之间的距离,默认以米为单位。若要转换为千米,请将CLLocationDistance/1000.0相除。若要得到英里,请将CLLocationDistance*0.62137相乘。

 //Pass your current location Latitude and longitude
                     CLLocation *currentlocation = [[CLLocation alloc] initWithLatitude:13.015370f  longitude:80.200393f];
 //Pass your destination location Latitude and longitude 
CLLocation *destination = [[CLLocation alloc] initWithLatitude:37.420948f longitude:-122.09578499999998f];
CLLocationDistance meters = [currentlocation distanceFromLocation:destination];
//get distance in meters
    NSLog(@"meters :%f", meters);
//get distance in kilometers
    CLLocationDistance kilometers = meters / 1000.0;
    NSLog(@"kilometers :%f", kilometers);
//Get distance in miles
    NSLog(@"Miles:%f",kilometers*0.62137);
//convert kilometers to int value
    int num=kilometers;

1
请添加解释以改善答案;仅有代码的答案是不被鼓励的!谢谢! - namezero
1
使用CLLocationDistance计算两个纬度和经度之间的距离,默认情况下它以米为单位给出值。要转换为千米,请将CLLocationDistance除以1000.0。要获取英里,请将CLLocationDistance乘以0.62137。 - Kamalkumar.E

7

SWIFT 4

虽然来晚了一步,但您也可以创建如下的扩展:

CLLocationDistance.swift

import UIKit
import CoreLocation

extension CLLocationDistance {
    func inMiles() -> CLLocationDistance {
        return self*0.00062137
    }

    func inKilometers() -> CLLocationDistance {
        return self/1000
    }
}

您可以这样称呼它:
distance.inKilometers()

我希望这能对任何在此遇到问题的人有所帮助!

4

Swift:

  var initialLocation :CLLocation?
  var updatedUserLocation :CLLocation?
  var distanceBetweenLocations: CLLocationDistance?

//MK MapView Delegate
  func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    updatedUserLocation = locations.last
    distanceBetweenLocations =  updatedUserLocation!.distanceFromLocation(initialLocation!)

    //convert To Miles
    distanceBetweenLocations = Utility.convertCLLocationDistanceToMiles(distanceBetweenLocations)

//Setting Distance Value
    distanceLabel.text = String(format: " Distance : %.2f ", distanceBetweenLocations!)

  }

注意:我有一个名为Utility的类,它提供了项目中通用的类方法。这是为了更好地重用代码并减少冗余。

//  Utility.swift

import UIKit
import Foundation
import CoreLocation

class Utility {

  class func convertCLLocationDistanceToMiles (var targetDistance : CLLocationDistance?) -> CLLocationDistance {
    targetDistance =  targetDistance!*0.00062137
    return targetDistance!
  }
  class func convertCLLocationDistanceToKiloMeters (var targetDistance : CLLocationDistance?) -> CLLocationDistance {
    targetDistance =  targetDistance!/1000
    return targetDistance!
  }

}

1

用Swift编程就容易多了

// Use you CLLocationDistance as the value 'kilometers':    
let kms = Measurement(value: kilometers, unit: UnitLength.kilometers)
// Then you can convert that to miles if you'd like:
let miles = kms.converted(to: .miles)
// Get the double value:
let doubleValue = miles.value
print("The distances is \(doubleValue) miles")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接