saber obtener mis mapa longitud lector latitud google geográficas geograficas coordenadas con como buscar ios swift location maps

ios - mis - Obtener la ubicación/coordenadas actuales del usuario



mapa con coordenadas geográficas (12)

Así es como soy

obtener la ubicación actual y mostrar en Map in Swift 2.0

Asegúrese de haber agregado CoreLocation y MapKit framework a su proyecto (Esto no es necesario con XCode 7.2.1)

import Foundation import CoreLocation import MapKit class DiscoverViewController : UIViewController, CLLocationManagerDelegate { @IBOutlet weak var map: 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: [CLLocation]) { 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.map.setRegion(region, animated: true) } }

Aquí está la pantalla de resultados

¿Cómo puedo almacenar la ubicación actual del usuario y también mostrar la ubicación en un mapa?

Puedo mostrar coordenadas predefinidas en un mapa, simplemente no sé cómo recibir información del dispositivo.

También sé que tengo que agregar algunos elementos en una lista. ¿Cómo puedo hacer eso?


Importar biblioteca como:

import CoreLocation

establecer Delegado:

CLLocationManagerDelegate

Tome la variable como:

var locationManager:CLLocationManager!

En viewDidLoad () escribe este bonito código:

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

Escribir los métodos de delegado CLLocation:

//MARK: - location delegate methods func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userLocation :CLLocation = locations[0] as CLLocation print("user latitude = /(userLocation.coordinate.latitude)") print("user longitude = /(userLocation.coordinate.longitude)") self.labelLat.text = "/(userLocation.coordinate.latitude)" self.labelLongi.text = "/(userLocation.coordinate.longitude)" let geocoder = CLGeocoder() geocoder.reverseGeocodeLocation(userLocation) { (placemarks, error) in if (error != nil){ print("error in reverseGeocode") } let placemark = placemarks! as [CLPlacemark] if placemark.count>0{ let placemark = placemarks![0] print(placemark.locality!) print(placemark.administrativeArea!) print(placemark.country!) self.labelAdd.text = "/(placemark.locality!), /(placemark.administrativeArea!), /(placemark.country!)" } } } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Error /(error)") }

Ahora configure el permiso para acceder a la ubicación, así que agregue el valor de esta clave en su archivo info.plist

<key>NSLocationAlwaysUsageDescription</key> <string>Will you allow this app to always know your location?</string> <key>NSLocationWhenInUseUsageDescription</key> <string>Do you allow this app to know your current location?</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>Do you allow this app to know your current location?</string>

100% trabajando sin ningún problema. PROBADO


No tienes que hacer muchas cosas, solo agrega estas dos líneas y podrás mostrar la ubicación actual del usuario en el mapa cuando el usuario toque el botón (Tendrás el botón de mostrar la ubicación actual como una ventaja adicional :))

mapView.myLocationEnabled = true mapView.settings.myLocationButton = true


Para obtener la ubicación actual de un usuario, debe declarar:

let locationManager = CLLocationManager()

En viewDidLoad() debe instanitar la clase CLLocationManager , así:

// Ask for Authorisation from the User. self.locationManager.requestAlwaysAuthorization() // For use in foreground self.locationManager.requestWhenInUseAuthorization() if CLLocationManager.locationServicesEnabled() { locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters locationManager.startUpdatingLocation() }

Luego, en el método CLLocationManagerDelegate puede obtener las coordenadas de ubicación actuales del usuario:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return } print("locations = /(locValue.latitude) /(locValue.longitude)") }

En info.plist, deberá agregar NSLocationAlwaysUsageDescription y su mensaje de alerta personalizado, como AppName (Aplicación de demostración), le gustaría usar su ubicación actual.


Primero importe la biblioteca de CoreLocation y MapKit:

import MapKit import CoreLocation

heredar de CLLocationManagerDelegate a nuestra clase

class ViewController: UIViewController, CLLocationManagerDelegate

crea una variable locationManager, estos serán tus datos de ubicación

var locationManager = CLLocationManager()

crear una función para obtener la información de ubicación, sea específico, esta sintaxis exacta funciona:

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

en su función crea una constante para la ubicación actual de los usuarios

let userLocation:CLLocation = locations[0] as CLLocation // note that locations is same as the one in the function declaration

deje de actualizar la ubicación, esto evita que su dispositivo cambie constantemente la Ventana para centrar su ubicación mientras se mueve (puede omitir esto si desea que funcione de otra manera)

manager.stopUpdatingLocation()

obtener la coordinación de usuarios desde userLocatin que acaba de definir:

let coordinations = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude,longitude: userLocation.coordinate.longitude)

defina cómo se amplía el mapa que quiere que sea:

let span = MKCoordinateSpanMake(0.2,0.2) combina estos dos para obtener la región:

let region = MKCoordinateRegion(center: coordinations, span: span)//this basically tells your map where to look and where from what distance

ahora establece la región y elige si quieres que vaya allí con animación o no

mapView.setRegion(region, animated: true)

cierra tu función }

desde su botón u otra forma en que quiera establecer el locationManagerDeleget en self

ahora permite que se muestre la ubicación

designar la precisión

locationManager.desiredAccuracy = kCLLocationAccuracyBest

autorizar:

locationManager.requestWhenInUseAuthorization()

para poder autorizar el servicio de localización, necesita agregar estas dos líneas a su plist

obtener ubicación:

locationManager.startUpdatingLocation()

muéstralo al usuario:

mapView.showsUserLocation = true

Este es mi código completo:

import UIKit import MapKit import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate { @IBOutlet weak var mapView: MKMapView! var locationManager = CLLocationManager() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func locateMe(sender: UIBarButtonItem) { locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() mapView.showsUserLocation = true } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userLocation:CLLocation = locations[0] as CLLocation manager.stopUpdatingLocation() let coordinations = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude,longitude: userLocation.coordinate.longitude) let span = MKCoordinateSpanMake(0.2,0.2) let region = MKCoordinateRegion(center: coordinations, span: span) mapView.setRegion(region, animated: true) } }


debes hacer esos pasos:

  1. agregue CoreLocation.framework a BuildPhases -> Enlace binario con bibliotecas (ya no es necesario a partir de XCode 7.2.1)
  2. importe CoreLocation a su clase - lo más probable es ViewController.swift
  3. agregue CLLocationManagerDelegate a su declaración de clase
  4. agregar NSLocationWhenInUseUsageDescription y NSLocationAlwaysUsageDescription a plist
  5. gestor de ubicación init

    locationManager = CLLocationManager() locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestAlwaysAuthorization() locationManager.startUpdatingLocation()

  6. obtener la ubicación del usuario por:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let locValue:CLLocationCoordinate2D = manager.location!.coordinate print("locations = /(locValue.latitude) /(locValue.longitude)") }


primero agrega dos marcos en tu proyecto

1: MapKit

2: Corelocation (ya no es necesario a partir de XCode 7.2.1)

Definir en tu clase

var manager:CLLocationManager! var myLocations: [CLLocation] = []

luego en el método viewDidLoad codifica esto

manager = CLLocationManager() manager.desiredAccuracy = kCLLocationAccuracyBest manager.requestAlwaysAuthorization() manager.startUpdatingLocation() //Setup our Map View mapobj.showsUserLocation = true

no olvides agregar estos dos valores en un archivo plist

1: NSLocationWhenInUseUsageDescription 2: NSLocationAlwaysUsageDescription


Swift 3.0

Si no desea mostrar la ubicación del usuario en el mapa, pero solo desea almacenarla en firebase o en algún otro lugar, siga estos pasos,

import MapKit import CoreLocation

Ahora use CLLocationManagerDelegate en su VC y debe anular los últimos tres métodos que se muestran a continuación. Puede ver cómo el método requestLocation () obtendrá la ubicación del usuario actual utilizando estos métodos.

class MyVc: UIViewController, CLLocationManagerDelegate { let locationManager = CLLocationManager() override func viewDidLoad() { super.viewDidLoad() isAuthorizedtoGetUserLocation() if CLLocationManager.locationServicesEnabled() { locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters } } //if we have no permission to access user location, then ask user for permission. func isAuthorizedtoGetUserLocation() { if CLLocationManager.authorizationStatus() != .authorizedWhenInUse { locationManager.requestWhenInUseAuthorization() } } //this method will be called each time when a user change his location access preference. func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { if status == .authorizedWhenInUse { print("User allowed us to access location") //do whatever init activities here. } } //this method is called by the framework on locationManager.requestLocation(); func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { print("Did location updates is called") //store the user location here to firebase or somewhere } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Did location updates is called but failed getting location /(error)") } }

Ahora puede codificar la llamada siguiente una vez que el usuario inicie sesión en su aplicación. Cuando invoque requestLocation () invocará más adelante didUpdateLocations y podrá almacenar la ubicación en Firebase o en cualquier otro lugar.

if CLLocationManager.locationServicesEnabled() { locationManager.requestLocation(); }

Si está utilizando GeoFire, entonces, en el método didUpdateLocations anterior, puede almacenar la ubicación como se muestra a continuación.

geoFire?.setLocation(locations.first, forKey: uid) where uid is the user id who logged in to the app. I think you will know how to get UID based on your app sign in implementation.

Por último, vaya a Info.plist y habilite "Privacidad: ubicación cuando esté en uso Descripción del uso".

Cuando usa el simulador para probarlo, siempre le proporciona una ubicación personalizada que configuró en Simulator -> Depuración -> Ubicación.


NSLocationWhenInUseUsageDescription = Solicitar permiso para usar el servicio de ubicación cuando las aplicaciones están en segundo plano. en tu archivo plist.

Si esto funciona, por favor vote la respuesta.


override func viewDidLoad() { super.viewDidLoad() locationManager.requestWhenInUseAuthorization(); if CLLocationManager.locationServicesEnabled() { locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters locationManager.startUpdatingLocation() } else{ print("Location service disabled"); } }

Este es su método de carga view y en ViewController Class también incluye el método de actualización mapStart de la siguiente manera

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { var locValue : CLLocationCoordinate2D = manager.location.coordinate; let span2 = MKCoordinateSpanMake(1, 1) let long = locValue.longitude; let lat = locValue.latitude; print(long); print(lat); let loadlocation = CLLocationCoordinate2D( latitude: lat, longitude: long ) mapView.centerCoordinate = loadlocation; locationManager.stopUpdatingLocation(); }

Además , no olvide agregar CoreLocation.FrameWork y MapKit.Framework en su proyecto (ya no es necesario a partir de XCode 7.2.1 )


// its with strongboard @IBOutlet weak var mapView: MKMapView! //12.9767415,77.6903967 - exact location latitude n longitude location let cooridinate = CLLocationCoordinate2D(latitude: 12.9767415 , longitude: 77.6903967) let spanDegree = MKCoordinateSpan(latitudeDelta: 0.2,longitudeDelta: 0.2) let region = MKCoordinateRegion(center: cooridinate , span: spanDegree) mapView.setRegion(region, animated: true)


import CoreLocation import UIKit class ViewController: UIViewController, CLLocationManagerDelegate { var locationManager: CLLocationManager! override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() locationManager.delegate = self locationManager.requestWhenInUseAuthorization() } //ViewDidLoad func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { if status != .authorizedWhenInUse {return} locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.startUpdatingLocation() let locValue: CLLocationCoordinate2D = manager.location!.coordinate print("locations = /(locValue.latitude) /(locValue.longitude)") }//locationManager func declaration }//VC Class

Debido a que la llamada a requestWhenInUseAuthorization es asincrónica, la aplicación llama a la función de locationManager una vez que el usuario ha concedido el permiso o lo ha rechazado. Por lo tanto, es apropiado ubicar su ubicación obteniendo el código dentro de esa función dado el permiso otorgado por el usuario. El mejor tutorial sobre esto que he encontrado es: https://www.hackingwithswift.com/read/22/2/requesting-location-core-location