dalam kode saya, pertama saya menunjukkan lokasi saat ini dan lokasi statis dari tempat yang diinginkan misalnya. Mobius cocok. tetapi ketika saya mencari hal yang sama yaitu. mobius fit menampilkan dua pin yang berdekatan satu sama lain dari lokasi mobius fit, bukan satu. bagaimana cara menampilkan hanya satu pin pada pencarian? Kode saya:
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()
}
}