计算行程时间 CLLocation Swift
Calculate travel time CLLocation Swift
我想在用户开始跟踪对象时使用 swift 2.2 查找移动对象的行程时间。我编写了 locationManager 函数来跟踪移动物体的位置和行进距离,但我需要查找行进时间?
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
userLocations.append(locations[0] as CLLocation)
if startLocation == nil {
startLocation = locations.first! as CLLocation
} else {
let distance = startLocation.distanceFromLocation(locations.last! as CLLocation) / 1000
let lastDistance = lastLocation.distanceFromLocation(locations.last! as CLLocation) / 1000;
vartraveledDistance += lastDistance
print( "\(startLocation)")
print( "\(locations.last!)")
print("FULL DISTANCE: \(traveledDistance)")
print("STRAIGHT DISTANCE: \(distance)")
}
lastLocation = locations.last! as CLLocation
}
@IBAction func StartTrip(sender: AnyObject) {
print("Start Trip")
locationManager.startUpdatingLocation()
}
@IBAction func StopTrip(sender: AnyObject) {
print("End Trip")
locationManager.stopUpdatingLocation()
traveledDistance.text = String(format:"%f km", self.vartraveledDistance)
}
我的答案将在 obj-c 中,因为我还没有学习 swift :)。但是你会明白的。
在您的 class 中,您可以创建 2 个日期:
NSDate *startDate;
NSDate *stopDate;
然后在您的 startTrip 方法中初始化开始日期:
startDate = [NSDate date];
并在 stopTrip 中初始化 stopDate 并计算行程时间:
stopDate = [NSDate date];
NSTimeInterval interval = [startDate timeIntervalSinceDate:stopDate];
NSLog (@"Travel time = %.0f seconds", interval);
此外,如果您使用的是 MKMaps,在 MKDirections class 中有一个方法
-(void)calculateETAWithCompletionHandler:(MKETAHandler)completionHandler
它可以让您计算预计的旅行时间
可以在设置startLocation时保存startDate,使用NSDate timeIntervalSinceDate方法计算行程经过时间:
首先将一个 startDate 对象和一个计算的 属性 添加到您的视图控制器:
var startDate: NSDate!
var traveledTime: Double { return NSDate().timeIntervalSinceDate(startDate) }
然后在设置 startLocation 后设置 startDate:
if startLocation == nil {
startLocation = locations.first
startDate = NSDate()
// code ...
}
使用 NSDateComponentsFormatter 创建一个扩展来格式化你的时间:
extension NSTimeInterval {
struct DateComponents {
static let formatterPositional: NSDateComponentsFormatter = {
let dateComponentsFormatter = NSDateComponentsFormatter()
dateComponentsFormatter.unitsStyle = .Positional
dateComponentsFormatter.allowedUnits = [.Hour,.Minute,.Second]
dateComponentsFormatter.zeroFormattingBehavior = .DropLeading
return dateComponentsFormatter
}()
}
var positionalTime: String {
return DateComponents.formatterPositional.stringFromTimeInterval(self) ?? ""
}
}
现在您可以只查看旅行时间:
print("travel elapsed time: \(traveledTime.positionalTime)")
我想在用户开始跟踪对象时使用 swift 2.2 查找移动对象的行程时间。我编写了 locationManager 函数来跟踪移动物体的位置和行进距离,但我需要查找行进时间?
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
userLocations.append(locations[0] as CLLocation)
if startLocation == nil {
startLocation = locations.first! as CLLocation
} else {
let distance = startLocation.distanceFromLocation(locations.last! as CLLocation) / 1000
let lastDistance = lastLocation.distanceFromLocation(locations.last! as CLLocation) / 1000;
vartraveledDistance += lastDistance
print( "\(startLocation)")
print( "\(locations.last!)")
print("FULL DISTANCE: \(traveledDistance)")
print("STRAIGHT DISTANCE: \(distance)")
}
lastLocation = locations.last! as CLLocation
}
@IBAction func StartTrip(sender: AnyObject) {
print("Start Trip")
locationManager.startUpdatingLocation()
}
@IBAction func StopTrip(sender: AnyObject) {
print("End Trip")
locationManager.stopUpdatingLocation()
traveledDistance.text = String(format:"%f km", self.vartraveledDistance)
}
我的答案将在 obj-c 中,因为我还没有学习 swift :)。但是你会明白的。
在您的 class 中,您可以创建 2 个日期:
NSDate *startDate;
NSDate *stopDate;
然后在您的 startTrip 方法中初始化开始日期:
startDate = [NSDate date];
并在 stopTrip 中初始化 stopDate 并计算行程时间:
stopDate = [NSDate date];
NSTimeInterval interval = [startDate timeIntervalSinceDate:stopDate];
NSLog (@"Travel time = %.0f seconds", interval);
此外,如果您使用的是 MKMaps,在 MKDirections class 中有一个方法
-(void)calculateETAWithCompletionHandler:(MKETAHandler)completionHandler
它可以让您计算预计的旅行时间
可以在设置startLocation时保存startDate,使用NSDate timeIntervalSinceDate方法计算行程经过时间:
首先将一个 startDate 对象和一个计算的 属性 添加到您的视图控制器:
var startDate: NSDate!
var traveledTime: Double { return NSDate().timeIntervalSinceDate(startDate) }
然后在设置 startLocation 后设置 startDate:
if startLocation == nil {
startLocation = locations.first
startDate = NSDate()
// code ...
}
使用 NSDateComponentsFormatter 创建一个扩展来格式化你的时间:
extension NSTimeInterval {
struct DateComponents {
static let formatterPositional: NSDateComponentsFormatter = {
let dateComponentsFormatter = NSDateComponentsFormatter()
dateComponentsFormatter.unitsStyle = .Positional
dateComponentsFormatter.allowedUnits = [.Hour,.Minute,.Second]
dateComponentsFormatter.zeroFormattingBehavior = .DropLeading
return dateComponentsFormatter
}()
}
var positionalTime: String {
return DateComponents.formatterPositional.stringFromTimeInterval(self) ?? ""
}
}
现在您可以只查看旅行时间:
print("travel elapsed time: \(traveledTime.positionalTime)")