2017-04-09 121 views
1

有人可以帮助我了解我需要添加哪些内容以获取用户位置和地标之间的距离吗?我只是不确定要在distanceLabel.text中更改哪些内容才能将数字更改为每个地标。谢谢!Swift MKMapItems距用户的距离位置

import UIKit 
import MapKit 

class ListedMapTableViewController: UITableViewController, CLLocationManagerDelegate { 

var mapItems: [MKMapItem]! 
var userLocation = CLLocationManager() 
let distanceFormatter = MKDistanceFormatter() 


override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return mapItems.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "resultCell", for: indexPath) as! ListedTableViewCell 

    // Configure the cell... 
    let row = indexPath.row 
    let item = mapItems[row] 
    cell.nameLabel.text = item.name 
    cell.detailLabel.text = item.phoneNumber 
    let distanceInMeters : Double = self.userLocation.location!.distance(from: mapItems[row].placemark.location!) 
    let distanceInMiles : Double = ((distanceInMeters.description as String).doubleValue * 0.00062137) 
    cell.distanceLabel.text = "\(distanceInMiles.string(2)) miles away" 

    return cell 
} 

} 


extension String { 
var doubleValue: Double { 
    return (self as NSString).doubleValue 
} 
} 

//formats a double's decimal places 
extension Double { 
func string(_ fractionDigits:Int) -> String { 
    let formatter = NumberFormatter() 
    formatter.minimumFractionDigits = fractionDigits 
    formatter.maximumFractionDigits = fractionDigits 
    return formatter.string(from: NSNumber(value: fractionDigits))! 
} 
} 
+0

只是改变了NSNumber(value:self))! – LBIMBA

回答

1

CLLocation有一个distanceFromLocation方法,从而给出了两个CLLocations:

CLLocationDistance distanceInMeters = [location1 distanceFromLocation:location2]; 

或斯威夫特3:

//:游乐场 - 名词:一个地方,人们可以玩

import CoreLocation 


let coordinate₀ = CLLocation(latitude: 5.0, longitude: 5.0) 
let coordinate₁ = CLLocation(latitude: 5.0, longitude: 3.0) 

let distanceInMeters = coordinate₀.distance(from: coordinate₁) // result is in meters 

你在这里得到的距离,所以1英里= 1609米

if(distanceInMeters <= 1609) 
{ 
// under 1 mile 
} 
else 
{ 
// out of 1 mile 
}