Current Location in Google Maps with swift

后端 未结 5 934
星月不相逢
星月不相逢 2020-12-17 07:46

I\'m trying to display the user\'s current location on a google map but in the case below, the map doesn\'t even get displayed. What should I change to fix this?



        
相关标签:
5条回答
  • 2020-12-17 07:56

    do requier setting on infoPlist and then try this

    @IBOutlet weak var your "name of view which show map": GMSMapView!
    
    override func viewDidLoad(){
            super.viewDidLoad()
    
      placesClient = GMSPlacesClient.shared()
      locationManager.requestAlwaysAuthorization()
         if CLLocationManager.locationServicesEnabled(){     
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyKilometer
            locationManager.distanceFilter = 500
            locationManager.requestWhenInUseAuthorization()
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()  
      }   
        mapView.settings.myLocationButton = true
        mapView.settings.zoomGestures = true
        mapView.animate(toViewingAngle: 45)
        mapView.delegate = self  }
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
         let newLocation = locations.last // find your device location
         mapView.camera = GMSCameraPosition.camera(withTarget: newLocation!.coordinate, zoom: 14.0) // show your device location on map
         mapView.settings.myLocationButton = true // show current location button
         var lat = (newLocation?.coordinate.latitude)! // get current location latitude
         var long = (newLocation?.coordinate.longitude)! //get current location longitude
    
    }
    
    0 讨论(0)
  • 2020-12-17 07:59

    Add the appropriate properties into the info.plist.

    You should put make sure you have the NS properties of locationalwaysusagedescription and wheninuseusagedescription in the information properties list. This allows for the permissions of the current location to be asked.

    0 讨论(0)
  • 2020-12-17 08:08

    You can try this bellow code its working fine

    import UIKit
    import GoogleMaps
    import GooglePlaces
    
    class SearchMapsViewController: UIViewController,
         UINavigationBarDelegate, GMSAutocompleteFetcherDelegate, 
         LocateOnTheMap, UISearchBarDelegate, CLLocationManagerDelegate 
    {
    
       @IBOutlet var googleMapsContainerView: UIView!
       var searchResultController: SearchResultsController!
       var resultsArray = [String]()
       var googleMapsView:GMSMapView!
       var gmsFetcher: GMSAutocompleteFetcher!
       var locationManager = CLLocationManager()
    
    override func viewDidAppear(animated: Bool) {        
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
    
        self.googleMapsView = GMSMapView (frame: self.googleMapsContainerView.frame)
        self.googleMapsView.settings.compassButton = true
        self.googleMapsView.myLocationEnabled = true
        self.googleMapsView.settings.myLocationButton = true
        self.view.addSubview(self.googleMapsView)
        searchResultController = SearchResultsController()
        searchResultController.delegate = self
        gmsFetcher = GMSAutocompleteFetcher()
        gmsFetcher.delegate = self
    }
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
    {
        print("Error" + error.description)
    }
    
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    {
        let userLocation = locations.last
        let center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude)
    
        let camera = GMSCameraPosition.cameraWithLatitude(userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude, zoom: 15);
        self.googleMapsView.camera = camera
        self.googleMapsView.myLocationEnabled = true
    
        let marker = GMSMarker(position: center)
    
        print("Latitude :- \(userLocation!.coordinate.latitude)")
        print("Longitude :-\(userLocation!.coordinate.longitude)")
        marker.map = self.googleMapsView
    
        marker.title = "Current Location"
        locationManager.stopUpdatingLocation()
    }
    
    0 讨论(0)
  • 2020-12-17 08:14

    It seems that your creation of the map isn't in your viewDidLoad function. You may want to try moving that there and see what happens.

    0 讨论(0)
  • 2020-12-17 08:20

    The problem is that you are setting the mapView's frame to CGRectZero. This causes the map to have zero height and zero width, no wonder it does not show!

    Try setting it to CGRectMake(0,0,200,200) for example, this will give you a map at the left top of the screen with a size of 200 x 200.

    I have never used Swift before, so the syntax might be a little different for CGRectMake()

    0 讨论(0)
提交回复
热议问题