Диспетчер местоположений показывает неверное местоположение в gmsMapView swift 4.2 - PullRequest
0 голосов
/ 06 марта 2019

У меня есть проблема, которую я не могу решить.Я пытаюсь получить текущее местоположение, чтобы обновить вид карты и центрировать камеру, но когда я закрываю контроллер вида и запускаю новый контроллер Mapview, «текущее местоположение» показывает неправильное местоположение, рядом с моим положением, но не текущим местоположением.Кто-нибудь может мне помочь?это мой код:

class MapContainerViewController: UIViewController{
@IBOutlet weak var mapView: GMSMapView!

var locationManager = CLLocationManager()
var myLocation: CLLocation?
var autorizeChange: Bool?
var geofire: GeoFire?
var createGeoforme: Bool?
var INITIAL_CENTER: CLLocation?
var searchCircle: GMSCircle?
var timer = Timer()

override func viewDidLoad() {
    super.viewDidLoad()
    autorizeChange = true
    checkLocationServices()
    createGeoforme = false
    mapView.delegate = self

    // Do any additional setup after loading the view.
  }


 func setupLocationManager(){
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.distanceFilter = 100
    locationManager.pausesLocationUpdatesAutomatically = false
    locationManager.startMonitoringSignificantLocationChanges()
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()
}

func checkLocationServices(){
    if CLLocationManager.locationServicesEnabled(){
        setupLocationManager()
        checkLocationAutorization()
    } else {

    }
}

func checkLocationAutorization(){
    switch CLLocationManager.authorizationStatus() {
    case .authorizedWhenInUse:
        //Do map stuff
        if (mapView.isMyLocationEnabled == false ){
            mapView.isMyLocationEnabled = true
            mapView.settings.myLocationButton = true
            var ref: DatabaseReference
            ref = Database.database().reference()
            geofire = GeoFire(firebaseRef: ref)              

        }
        break
    case .denied:
        //Show alert instructing
        break
    case .notDetermined:
        //location manager
        locationManager.requestWhenInUseAuthorization()
        break
    case .restricted:
        //Show alert letting them know
        break
    case .authorizedAlways:
        break
    default:

    }
}
}

}

extension MapContainerViewController: GMSMapViewDelegate{

func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) 
 {
    mapView.clear()
    let coordinate = mapView.projection.coordinate(for: mapView.center)
    var cooordinate2d = CLLocationCoordinate2D.init(latitude: coordinate.latitude, longitude: coordinate.longitude)
    var circ = GMSCircle.init(position: coordinate, radius: zoomLevelToRadius(zoomLevel: Double(position.zoom)))
    circ.fillColor = UIColor.init(displayP3Red: 0, green: 255, blue: 255, alpha: 0.15)
    circ.strokeColor = UIColor.init(displayP3Red: 0, green: 0, blue: 0, alpha: 0.15)
    circ.strokeWidth = 0.5
    circ.map = mapView;

}

func zoomLevelToRadius(zoomLevel: Double) -> Double{
// Approximation to fit circle into view
    return (16384000/pow(2, zoomLevel))
}
}

extension MapContainerViewController: CLLocationManagerDelegate{

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    let userLocation: CLLocation = locations[0]
    let location = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
    mapView.camera = GMSCameraPosition.camera(withTarget: location, zoom: 14)
    let centerLocation = mapView.projection.coordinate(for: mapView.center)
}

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    checkLocationAutorization()
}

}

1 Ответ

0 голосов
/ 06 марта 2019

Этот пример кода может быть вашим решением, вы можете найти здесь https://github.com/SwiftGuides/Google_Place_Picker

Это пример кода, который я написал для сборщика мест Google, чтобы выбрать точное местоположение (не рядом)

В вашем случае вы можете применить это тоже. Просто проверьте пример кода, вы получите решение

...