2017-04-09 8 views
1

ユーザーの場所と目印との距離を取得するために追加する必要があることを教えていただけますか?私は各Placemarkへの番号の変更を行うために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(値:自己))を変更するだけです! – LBIMBA

答えて

1

CLLocationはので、2つのCLLocations与えdistanceFromLocation方法があります。

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 
}