2015-06-23 2 views
4

Я пытаюсь создать автоматический поиск в своем приложении с помощью Mapkit. Я бы хотел, чтобы viewcontroller нашел текущее местоположение и все отели в их районе. Мне удалось получить текущее местоположение, но я не могу найти какие-либо руководства по выполнению автоматического поиска из строки. Это то, что я до сих пор:Swift Mapkit автоматический поиск бизнеса

import UIKit 
import MapKit 
import CoreLocation 

class MapClass: UIViewController, CLLocationManagerDelegate, UISearchBarDelegate { 
    @IBOutlet weak var mapView: MKMapView! 
    var locationManager: CLLocationManager! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if (CLLocationManager.locationServicesEnabled()) 
     { 
      locationManager = CLLocationManager() 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyBest 
      locationManager.requestAlwaysAuthorization() 
      locationManager.startUpdatingLocation() 
     } 
    } 

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
     let location = locations.last as! CLLocation 

     let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 
     let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

     self.mapView.setRegion(region, animated: true) 

     locationManager.stopUpdatingLocation() 
    } 
+1

Класс, который вы ищете for is 'MKLocalSearch' - вы можете искать примеры; вот сообщение [MKLocalSearch в NSHipster] (http://nshipster.com/mklocalsearch/). –

ответ

3

Благодаря Nate Кук указал мне в правильном направлении, я был в состоянии решить эту проблему с помощью следующего кода:

import UIKit 
import MapKit 
import CoreLocation 

class MapClass: UIViewController, CLLocationManagerDelegate, UISearchBarDelegate { 

var searchController:UISearchController! 
var annotation:MKAnnotation! 
var localSearchRequest:MKLocalSearchRequest! 
var localSearch:MKLocalSearch! 
var localSearchResponse:MKLocalSearchResponse! 
var error:NSError! 
var pointAnnotation:MKPointAnnotation! 
var pinAnnotationView:MKPinAnnotationView! 


@IBOutlet weak var mapView: MKMapView! 
var locationManager: CLLocationManager! 

let searchRadius: CLLocationDistance = 2000 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if (CLLocationManager.locationServicesEnabled()) 
    { 
     locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.requestWhenInUseAuthorization() 
     locationManager.startUpdatingLocation() 
    } 

} 

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 

    let location = locations.last as! CLLocation 
    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 
    self.mapView.setRegion(region, animated: true) 
    var latitude: Double = location.coordinate.latitude 
    var longitude: Double = location.coordinate.longitude 
    let initialLocation = CLLocation(latitude: latitude, longitude: longitude) 
    // 1 
    let request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = "Restaurant" 
    // 2 
    let span = MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1) 

    request.region = MKCoordinateRegion(center: initialLocation.coordinate, span: span) 
    // 3 
    let search = MKLocalSearch(request: request) 
    search.startWithCompletionHandler { 
     (response: MKLocalSearchResponse!, error: NSError!) in 

     for item in response.mapItems as! [MKMapItem] { 
      println(item.name) 
      //println("Latitude = \(item.placemark.location.coordinate.latitude)") 
      //println("Longitude = \(item.placemark.location.coordinate.longitude)") 
      self.addPinToMapView(item.name, latitude: item.placemark.location.coordinate.latitude, longitude: item.placemark.location.coordinate.longitude) 
     } 
    } 

    locationManager.stopUpdatingLocation() 

    let coordinateRegion = MKCoordinateRegionMakeWithDistance(initialLocation.coordinate, searchRadius * 2.0, searchRadius * 2.0) 
    mapView.setRegion(coordinateRegion, animated: true) 

} 


func addPinToMapView(title: String, latitude: CLLocationDegrees, longitude: CLLocationDegrees) { 
    let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
    let annotation = MyAnnotation(coordinate: location, title: title) 

    mapView.addAnnotation(annotation) 
} 


func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) 
{ 
    println("Error: " + error.localizedDescription) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 
+0

может предоставить пример кода для этого пользователя @ user4812000 –

Смежные вопросы