アイデア:はループとはスウィフト点に最も近い店を見つける3
アプリケーションはドライバーが顧客に最も近いショップ/レストランを見ることができます。私が持っているもの
:私の地元エリア内のすべてのお店 を見つけるため
let clientLat = "24.449384"
let clientLng = "56.343243"
- ファンクション文字列として保存
- 座標
私は私の地元エリア内のお店のすべての座標を保存しようと、私は成功しました:
var coordinates: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]() func performSearch() { coordinates.removeAll() let request = MKLocalSearchRequest() request.naturalLanguageQuery = "starbucks" request.region = mapView.region let search = MKLocalSearch(request: request) search.start(completionHandler: {(response, error) in if error != nil { print("Error occured in search: \(error!.localizedDescription)") } else if response!.mapItems.count == 0 { print("No matches found") } else { print("Matches found") for item in response!.mapItems { self.coordinates.append(item.placemark.coordinate) // need to sort coordinates // need to find the closest let annotation = MKPointAnnotation() annotation.coordinate = item.placemark.coordinate annotation.title = item.name self.mapView.addAnnotation(annotation) } } })
}
を私は必要なもの:
私は座標をループしたいです緯度と経度の短い文字列に最も近いショップ(キロメートル)を見つけて、それにピンを付けます。
UPDATE
func performSearch() { coordinates.removeAll() let request = MKLocalSearchRequest() request.naturalLanguageQuery = "starbucks" request.region = mapView.region let search = MKLocalSearch(request: request) search.start(completionHandler: {(response, error) in if error != nil { print("Error occured in search: \(error!.localizedDescription)") } else if response!.mapItems.count == 0 { print("No matches found") } else { print("Matches found") for item in response!.mapItems { self.coordinates.append(item.placemark.coordinate) let pointToCompare = CLLocation(latitude: 24.741721, longitude: 46.891440) let storedCorrdinates = self.coordinates.map({CLLocation(latitude: $0.latitude, longitude: $0.longitude)}).sorted(by: { $0.distance(from: pointToCompare) < $1.distance(from: pointToCompare) }) self.coordinate = storedCorrdinates } let annotation = MKPointAnnotation() annotation.coordinate = self.coordinate[0].coordinate self.mapView.addAnnotation(annotation) } })
} あなたはあなたがCLLocationタイプに変換してから
distance(from:)
法を用いて、座標間の距離を比較することができ
- 座標
「座標」はCLLocationCoordinate2DまたはCLLocationの配列ですか? – brimstone
距離計算式を使用できますか? [この質問]を参照してください(https://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula)2つの緯度/経度の間の距離式のJavaScript実装の場合。 (Haversineの式) –
@ブリムストンはい 'var座標:[CLLocationCoordinate2D] = [CLLocationCoordinate2D]()' – leo0019