Swift MKMapItems расстояние от пользователей Расположение
Может кто-нибудь помочь мне понять, что мне нужно добавить, чтобы получить расстояние между местоположением пользователей и метками? Я просто не уверен, что нужно изменить в distanceLabel.text, чтобы число менялось для каждой метки. Благодарю вас!
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))!
}
}
1 ответ
У CLLocation есть метод distanceFromLocation, поэтому даны два CLLocation:
CLLocationDistance distanceInMeters = [location1 distanceFromLocation:location2];
или в Swift 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
}