사용자의 현재 위치/좌표 가져오기
사용자의 현재 위치를 저장하고 지도에 위치를 표시하려면 어떻게 해야 합니까?
미리 정의된 좌표를 지도에 표시할 수 있습니다. 장치에서 정보를 수신하는 방법을 모르겠습니다.
또한 Plist에 몇 가지 항목을 추가해야 한다는 것도 알고 있습니다.내가 어떻게 그럴 수 있을까?
사용자의 현재 위치를 가져오려면 다음을 선언해야 합니다.
let locationManager = CLLocationManager()
viewDidLoad()
당신은 그것을 인스턴스화해야 합니다.CLLocationManager
클래스, 다음과 같은 것:
// 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()
}
그런 다음 CLLocationManagerDelegate 메서드에서 사용자의 현재 위치 좌표를 가져올 수 있습니다.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
에 info.plist 파일을 .NSLocationAlwaysUsageDescription
AppName(Demo App)과 같은 사용자 지정 경고 메시지가 현재 위치를 사용하려고 합니다.
다음 단계를 수행해야 합니다.
- 더하다
CoreLocation.framework
단계 ->With ( 7 더 하지 않음)는 다음과 같습니다. -> 파일 이름은 XCode 7.2.1 파일 이름은 XCode 7.2.1 파일 이름은 XCode 7.1 파일 이름입니다. CoreLocation
클래스 - ViewController.swift 클래스입니다.- 더하다
CLLocationManagerDelegate
의 수업 에. - 더하다
NSLocationWhenInUseUsageDescription
그리고.NSLocationAlwaysUsageDescription
토플리스터 init 위치 관리자:
locationManager = CLLocationManager() locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestAlwaysAuthorization() locationManager.startUpdatingLocation()
사용자 위치 가져오기 기준:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let locValue:CLLocationCoordinate2D = manager.location!.coordinate print("locations = \(locValue.latitude) \(locValue.longitude)") }
Swift 5가 설치된 iOS 12.2 업데이트
plist 파일에 다음 개인 정보 보호 권한을 추가해야 합니다.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>
나의 모습은 이렇습니다.
현재 위치를 가져오고 Swift 2.0에서 지도에 표시
프로젝트에 CoreLocation 및 MapKit 프레임워크를 추가했는지 확인합니다(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)
}
}
다음은 결과 화면입니다.
다음과 같은 라이브러리 가져오기:
import CoreLocation
대리자 설정:
CLLocationManagerDelegate
다음과 같은 변수를 사용합니다.
var locationManager:CLLocationManager!
뷰에서 DidLoad()는 다음과 같은 예쁜 코드를 작성합니다.
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled(){
locationManager.startUpdatingLocation()
}
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)")
}
이제 위치에 대한 액세스 권한을 설정하여 이러한 키 값을 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% 문제 없이 작동합니다.테스트됨
NS 위치사용 중인 경우사용설명 = 앱이 백그라운드에 있을 때 위치 서비스 사용 권한을 요청합니다.당신의 리스트 파일에.
만약 이것이 효과가 있다면, 그 답에 투표해 주십시오.
먼저 Corelocation 및 MapKit 라이브러리 가져오기:
import MapKit
import CoreLocation
CLLocationManager에서 우리 클래스로 대표자 상속
class ViewController: UIViewController, CLLocationManagerDelegate
locationManager 변수를 만듭니다. 이 변수가 위치 데이터가 됩니다.
var locationManager = CLLocationManager()
위치 정보를 가져오는 함수를 만듭니다. 구체적으로 이 정확한 구문이 작동합니다.
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
함수에서 사용자의 현재 위치에 대한 상수를 만듭니다.
let userLocation:CLLocation = locations[0] as CLLocation // note that locations is same as the one in the function declaration
위치 업데이트를 중지합니다. 이렇게 하면 이동하는 동안 장치가 위치를 중앙으로 이동하도록 계속 창을 변경할 수 없습니다. 그렇지 않으면 이 창을 생략할 수 있습니다.
manager.stopUpdatingLocation()
user에서 사용자를 조정합니다. 방금 정의한 위치:
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)//this basically tells your map where to look and where from what distance
이제 지역을 설정하고 애니메이션과 함께 그곳에 가기를 원하는지 여부를 선택합니다.
mapView.setRegion(region, animated: true)
을 종료합니다.}
버튼 또는 다른 방법으로 위치를 설정하려는 경우ManagerDelete를 self로 설정합니다.
이제 위치가 표시되도록 허용합니다.
지정 정확도
locationManager.desiredAccuracy = kCLLocationAccuracyBest
권한 부여:
locationManager.requestWhenInUseAuthorization()
위치 서비스를 승인하려면 이 두 줄을 목록에 추가해야 합니다.
위치 가져오기:
locationManager.startUpdatingLocation()
사용자에게 표시:
mapView.showsUserLocation = true
이것이 제 완전한 코드입니다.
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)
}
}
스위프트 3.0
지도에 사용자 위치를 표시하지 않고 파이어베이스나 다른 곳에 저장하고 싶다면 다음 단계를 수행합니다.
import MapKit
import CoreLocation
이제 VC에서 CLLocationManagerDelegate를 사용하고 아래에 표시된 마지막 세 가지 방법을 재정의해야 합니다.requestLocation() 메서드가 이러한 메서드를 사용하여 현재 사용자 위치를 얻는 방법을 확인할 수 있습니다.
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)")
}
}
이제 사용자가 앱에 로그인하면 아래 통화를 코딩할 수 있습니다.requestLocation()이 호출되면 위의 didUpdateLocations가 추가로 호출되며 위치를 Firebase 또는 다른 곳에 저장할 수 있습니다.
if CLLocationManager.locationServicesEnabled() {
locationManager.requestLocation();
}
GeoFire를 사용하는 경우 위의 didUpdateLocations 메서드에서 아래와 같이 위치를 저장할 수 있습니다.
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.
마지막으로, Info.plist로 이동하여 "Privacy - Use Description에 있을 때의 위치"를 활성화합니다.
시뮬레이터를 사용하여 테스트할 때 항상 시뮬레이터 -> 디버그 -> 위치에서 구성한 하나의 사용자 지정 위치를 제공합니다.
먼저 프로젝트에 두 개의 프레임워크를 추가합니다.
1: 맵킷
2: 핵심 위치(XCode 7.2.1 이후 더 이상 필요 없음)
클래스에서 정의
var manager:CLLocationManager!
var myLocations: [CLLocation] = []
그런 다음 viewDidLoad 메서드 코드:
manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()
//Setup our Map View
mapobj.showsUserLocation = true
plist 파일에 이 두 값을 추가하는 것을 잊지 마십시오.
1: NSLocationWhenInUseUsageDescription
2: NSLocationAlwaysUsageDescription
용도:
클래스에서 필드 정의
let getLocation = GetLocation()
클래스 함수에서 단순 코드로 사용:
getLocation.run {
if let location = $0 {
print("location = \(location.coordinate.latitude) \(location.coordinate.longitude)")
} else {
print("Get Location failed \(getLocation.didFailWithError)")
}
}
클래스:
import CoreLocation
public class GetLocation: NSObject, CLLocationManagerDelegate {
let manager = CLLocationManager()
var locationCallback: ((CLLocation?) -> Void)!
var locationServicesEnabled = false
var didFailWithError: Error?
public func run(callback: @escaping (CLLocation?) -> Void) {
locationCallback = callback
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
manager.requestWhenInUseAuthorization()
locationServicesEnabled = CLLocationManager.locationServicesEnabled()
if locationServicesEnabled { manager.startUpdatingLocation() }
else { locationCallback(nil) }
}
public func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]) {
locationCallback(locations.last!)
manager.stopUpdatingLocation()
}
public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
didFailWithError = error
locationCallback(nil)
manager.stopUpdatingLocation()
}
deinit {
manager.stopUpdatingLocation()
}
}
NSLocation을 추가하는 것을 잊지 마십시오.info..info.plist의 "은 " 중인 경우"입니다.
import CoreLocation
import UIKit
class ViewController: UIViewController, CLLocationManagerDelegate {
var locationManager: CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
}
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)")
}
}
냐하면전가로 가 걸려왔기 때문입니다.requestWhenInUseAuthorization
"비식입니다기"라고 . 앱이 호출합니다.locationManager
사용자가 권한을 부여하거나 거부한 후의 기능입니다.따라서 사용자에게 권한이 부여된 경우 해당 함수 내에 코드를 가져오는 위치를 배치하는 것이 적절합니다.이것은 제가 찾은 최고의 튜토리얼입니다.
override func viewDidLoad() {
super.viewDidLoad()
locationManager.requestWhenInUseAuthorization();
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
else{
print("Location service disabled");
}
}
이는 View did load 메서드이며 View Controller 클래스에도 다음과 같은 mapStart update 메서드가 포함되어 있습니다.
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();
}
또한 CoreLocation을 추가하는 것도 잊지 마십시오.Framework 및 MapKit.프로젝트의 프레임워크(XCode 7.2.1에서 더 이상 필요하지 않음)
import Foundation
import CoreLocation
enum Result<T> {
case success(T)
case failure(Error)
}
final class LocationService: NSObject {
private let manager: CLLocationManager
init(manager: CLLocationManager = .init()) {
self.manager = manager
super.init()
manager.delegate = self
}
var newLocation: ((Result<CLLocation>) -> Void)?
var didChangeStatus: ((Bool) -> Void)?
var status: CLAuthorizationStatus {
return CLLocationManager.authorizationStatus()
}
func requestLocationAuthorization() {
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
manager.startUpdatingLocation()
//locationManager.startUpdatingHeading()
}
}
func getLocation() {
manager.requestLocation()
}
deinit {
manager.stopUpdatingLocation()
}
}
extension LocationService: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
newLocation?(.failure(error))
manager.stopUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.sorted(by: {$0.timestamp > $1.timestamp}).first {
newLocation?(.success(location))
}
manager.stopUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
case .notDetermined, .restricted, .denied:
didChangeStatus?(false)
default:
didChangeStatus?(true)
}
}
}
필요한 ViewController에 이 코드를 작성해야 합니다.
//NOTE:: Add permission in info.plist::: NSLocationWhenInUseUsageDescription
let locationService = LocationService()
@IBAction func action_AllowButtonTapped(_ sender: Any) {
didTapAllow()
}
func didTapAllow() {
locationService.requestLocationAuthorization()
}
func getCurrentLocationCoordinates(){
locationService.newLocation = {result in
switch result {
case .success(let location):
print(location.coordinate.latitude, location.coordinate.longitude)
case .failure(let error):
assertionFailure("Error getting the users location \(error)")
}
}
}
func getCurrentLocationCoordinates() {
locationService.newLocation = { result in
switch result {
case .success(let location):
print(location.coordinate.latitude, location.coordinate.longitude)
CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
if error != nil {
print("Reverse geocoder failed with error" + (error?.localizedDescription)!)
return
}
if (placemarks?.count)! > 0 {
print("placemarks", placemarks!)
let pmark = placemarks?[0]
self.displayLocationInfo(pmark)
} else {
print("Problem with the data received from geocoder")
}
})
case .failure(let error):
assertionFailure("Error getting the users location \(error)")
}
}
}
여기 제게 효과가 있었던 복사 복사 예시가 있습니다.
http://swiftdeveloperblog.com/code-examples/determine-users-current-location-example-in-swift/
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
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.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
determineMyCurrentLocation()
}
func determineMyCurrentLocation() {
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.startUpdatingLocation()
//locationManager.startUpdatingHeading()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation:CLLocation = locations[0] as CLLocation
// Call stopUpdatingLocation() to stop listening for location updates,
// other wise this function will be called every time when user location changes.
// manager.stopUpdatingLocation()
print("user latitude = \(userLocation.coordinate.latitude)")
print("user longitude = \(userLocation.coordinate.longitude)")
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
{
print("Error \(error)")
}
}
이전의 모든 답변이 올바른 일련의 단계를 제대로 따르지 않았습니다.설정 시CLLocationManager
전화할 필요가 없습니다.CLLocationManager.locationServicesEnabled()
또는locationManager.requestWhenInUseAuthorization()
초판에그리고 당신은 전화하지 말아야 합니다.startUpdatingLocation()
권한이 있음을 확인할 때까지.
시작하려면 필요한 개인 정보 설정을 추가합니다.앱 대상을 선택하고 정보 탭으로 이동합니다."Custom iOS Target Properties" 섹션에서 마우스 오른쪽 단추를 클릭하고 "를 선택합니다.아래로 스크롤하여 "개인 정보" 항목을 선택합니다.
- "개인 정보 - 사용 중인 위치 사용 설명"
- "개인 정보 - 위치 항상 사용 설명"
- "개인 정보 - 항상 위치 및 사용 중인 경우 사용 설명"
앱의 필요에 따라 변경할 수.값에 대해 사용자에게 앱이 위치에 액세스해야 하는 이유를 설명하는 문장을 입력해야 합니다.지정된 설명이 사용자에게 유용하지 않을 경우 앱이 Apple에 의해 거부될 위험이 있습니다.
그런 다음 뷰 컨트롤러에서 사용자의 위치를 가져오는 예로 다음(강력하게 주석이 달린) 코드를 사용합니다.
import UIKit
import CoreLocation
class ViewController: UIViewController {
var locationManager: CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
// Setup the location manager
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation // Or other desired accuracy
// That's it for the initial setup. Everything else is handled in the
// locationManagerDidChangeAuthorization delegate method.
}
}
extension ViewController: CLLocationManagerDelegate {
// This is called as soon as the location manager is setup (in viewDidLoad)
// This is called when the user responds to the privacy dialog
// This is called if the user changes the privacy setting in the Settings app
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .notDetermined:
// Request the appropriate authorization based on the needs of the app
manager.requestWhenInUseAuthorization()
// manager.requestAlwaysAuthorization()
case .restricted:
print("Sorry, restricted")
// Optional: Offer to take user to app's settings screen
case .denied:
print("Sorry, denied")
// Optional: Offer to take user to app's settings screen
case .authorizedAlways, .authorizedWhenInUse:
// The app has permission so start getting location updates
manager.startUpdatingLocation()
@unknown default:
print("Unknown status")
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("Received \(locations.count) locations")
// Some location updates can be invalid or have insufficient accuracy.
// Find the first location that has sufficient horizontal accuracy.
// If the manager's desiredAccuracy is one of kCLLocationAccuracyNearestTenMeters,
// kCLLocationAccuracyHundredMeters, kCLLocationAccuracyKilometer, or kCLLocationAccuracyThreeKilometers
// then you can use $0.horizontalAccuracy <= manager.desiredAccuracy. Otherwise enter the number of meters desired.
if let location = locations.first(where: { $0.horizontalAccuracy <= 40 }) {
print("Good location found: \(location)")
// Call the following if you don't need any more updates
manager.stopUpdatingLocation()
// Do something useful with the found location
// - show on a map
// - Reverse geocode to get the address
// - send to server
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location manager error: \(error)")
}
}
// 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)
iOS Swift 4에서 100% 작동: Parmar Sajjad
1단계: Google 개발자 API 콘솔로 이동하여 ApiKey를 만듭니다.
2단계: 프로젝트로 이동하여 Cocoapods Google 지도 포드 설치
3단계: AppDelegate.swift 가져오기 Google 지도로 이동합니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
GMSServices.provideAPIKey("ApiKey")
return true
}
4단계: UIKit 가져오기 GoogleMaps 클래스 ViewController:UIView 컨트롤러, CL 위치 관리자 위임 {
@IBOutlet weak var mapview: UIView!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManagerSetting()
// 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.
}
func locationManagerSetting() {
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
self.showCurrentLocationonMap()
self.locationManager.stopUpdatingLocation()
}
func showCurrentLocationonMap() {
let
cameraposition = GMSCameraPosition.camera(withLatitude: (self.locationManager.location?.coordinate.latitude)! , longitude: (self.locationManager.location?.coordinate.longitude)!, zoom: 18)
let mapviewposition = GMSMapView.map(withFrame: CGRect(x: 0, y: 0, width: self.mapview.frame.size.width, height: self.mapview.frame.size.height), camera: cameraposition)
mapviewposition.settings.myLocationButton = true
mapviewposition.isMyLocationEnabled = true
let marker = GMSMarker()
marker.position = cameraposition.target
marker.snippet = "Macczeb Technologies"
marker.appearAnimation = GMSMarkerAnimation.pop
marker.map = mapviewposition
self.mapview.addSubview(mapviewposition)
}
}
5단계: info.plist 파일을 열고 개인 정보 아래에 추가 - 사용 중인 위치 설명 ...... 메인 스토리보드 파일 기본 이름 아래에
6단계: 실행
언급URL : https://stackoverflow.com/questions/25296691/get-users-current-location-coordinates
'programing' 카테고리의 다른 글
ValueError: 기본값이 10인 int()의 리터럴이 잘못되었습니다. (0) | 2023.05.04 |
---|---|
WPF 데이터 그리드에 목록을 바인딩하려면 어떻게 해야 합니까? (0) | 2023.05.04 |
Azure 테넌트와 Azure 서브스크립션의 차이점은 무엇입니까? (0) | 2023.05.04 |
후행 0 제거 (0) | 2023.05.04 |
SQL 다중 열을 다중 변수로 선택 (0) | 2023.04.29 |