in my code, first i am showing current location and static location of desired place eg. Mobius fit. but when i am searching the same ie. mobius fit it is displaying two pins close to each other of mobius fit location, instead of one. how to show only one pin on search? My code:
class LocationMapViewController: UIViewController,CLLocationManagerDelegate, MKMapViewDelegate,UISearchBarDelegate,UIGestureRecognizerDelegate{
var searchController:UISearchController!
var annotation:MKAnnotation!
var localSearchRequest:MKLocalSearchRequest!
var localSearch:MKLocalSearch!
var localSearchResponse:MKLocalSearchResponse!
var error:NSError!
var pointAnnotation:MKPointAnnotation!
var pinAnnotationView:MKAnnotationView!
let manager = CLLocationManager()
@IBOutlet var MKView: MKMapView!
@IBOutlet var searchBarButton: UISearchBar!
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
MKView.setRegion(region, animated: true)
self.MKView.showsUserLocation = true
}
//Here im displaying two static location and current location
let regionRadius: CLLocationDistance = 10000
override func viewDidLoad() {
self.searchBarButton.delegate = self
super.viewDidLoad()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
manager.stopMonitoringSignificantLocationChanges()
let initialLocation = CLLocation(latitude: 37.539624, longitude: -122.062990)
self.MKView.showsUserLocation = true
self.MKView.isZoomEnabled = true
centerMapOnLocation(location: initialLocation)
let myAnnotation: MKPointAnnotation = MKPointAnnotation()
myAnnotation.coordinate = CLLocationCoordinate2DMake(initialLocation.coordinate.latitude, initialLocation.coordinate.longitude);
myAnnotation.title = "Fit@PRC"
myAnnotation.subtitle = "Newark, CA 94560"
MKView.addAnnotation(myAnnotation)
MKView.selectAnnotation(myAnnotation, animated: true)
let MobiusLocation = CLLocation(latitude: 37.454904, longitude: -122.228262)
self.MKView.showsUserLocation = true
self.MKView.isZoomEnabled = true
centerMapOnLocation(location: MobiusLocation)
let mobiusAnnotation: MKPointAnnotation = MKPointAnnotation()
mobiusAnnotation.coordinate = CLLocationCoordinate2DMake(MobiusLocation.coordinate.latitude, MobiusLocation.coordinate.longitude);
mobiusAnnotation.title = "Mobius Fit"
mobiusAnnotation.subtitle = "Redwood City,CA 94061"
MKView.addAnnotation(mobiusAnnotation)
MKView.selectAnnotation(mobiusAnnotation, animated: true)
}
// this is my search function . how to clear previous pins on search ?
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.endEditing(true)
//1
searchBar.resignFirstResponder()
if self.MKView.annotations.count != 0{
annotation = self.MKView.annotations[0]
self.MKView.removeAnnotation(annotation)
}
//2
localSearchRequest = MKLocalSearchRequest()
localSearchRequest.naturalLanguageQuery = searchBar.text
localSearch = MKLocalSearch(request: localSearchRequest)
localSearch.start { (localSearchResponse, error) -> Void in
if localSearchResponse == nil{
let alertController = UIAlertController(title: nil, message: "Place Not Found", preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default, handler: nil))
self.present(alertController, animated: true, completion: nil)
return
}
//3
self.pointAnnotation = MKPointAnnotation()
self.pointAnnotation.title = searchBar.text
self.pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: localSearchResponse!.boundingRegion.center.latitude, longitude: localSearchResponse!.boundingRegion.center.longitude)
self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation, reuseIdentifier: nil)
self.MKView.centerCoordinate = self.pointAnnotation.coordinate
self.MKView.addAnnotation(self.pinAnnotationView.annotation!)
self.manager.stopUpdatingLocation()
self.manager.stopMonitoringSignificantLocationChanges()
}
}