ব্যবহারকারীর বর্তমান অবস্থান / সমন্বয়গুলি পান


194

আমি কীভাবে ব্যবহারকারীর বর্তমান অবস্থান সঞ্চয় করতে পারি এবং মানচিত্রে অবস্থানটিও প্রদর্শন করতে পারি?

আমি একটি মানচিত্রে প্রাক-সংজ্ঞায়িত স্থানাঙ্কগুলি প্রদর্শন করতে সক্ষম, আমি কেবল ডিভাইস থেকে কীভাবে তথ্য গ্রহণ করব তা জানি না।

এছাড়াও আমি জানি আমাকে প্লিস্টে কিছু আইটেম যুক্ত করতে হবে। আমি এটা কিভাবে করবো?

উত্তর:


225

ব্যবহারকারীর বর্তমান অবস্থান পেতে আপনাকে এই ঘোষণা করতে হবে:

let locationManager = CLLocationManager()

ইন viewDidLoad()আপনি instantiate আছে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)")
}

তথ্য.পুলিস্টে আপনাকে যুক্ত করতে হবে NSLocationAlwaysUsageDescription এবং আপনার কাস্টম সতর্কতা বার্তা পছন্দ করতে হবে; অ্যাপনাম (ডেমো অ্যাপ) আপনার বর্তমান অবস্থানটি ব্যবহার করতে চাই।


60
সম্পর্কে ভুলবেন না Import MapKit+ + CoreLocationযোগ + + CLLocationManagerDelegateবর্গ সংজ্ঞা।
Lukesivi

7
@ ইউশা যদি এটি আপনার কাছে অবজেক্টিভ-সি বলে মনে হয়, তবে আপনি কখনই অবজেক্টিভ-সি (বা সুইফট) দেখেননি
মার্টিন মার্কনকিনি

4
আপনি CLLocationManagerDelegate প্রোটোকলের বাস্তবায়ন উল্লেখ করতে ভুলে গেছেন।
ssd352

13
NSLocationAlwaysUsageDescriptionনতুন নামকরণ করা হয়েছেPrivacy - Location Always Usage Description
সৌদ রিজওয়ান

4
আপনাকে locationManagerস্থানীয় ভেরিয়েবলের পরিবর্তে বৈশ্বিক পরিবর্তনশীল হিসাবে ঘোষণা করতে হবেviewDidLoad
চেঙ্গসাম

100

আপনার এই পদক্ষেপগুলি করা উচিত:

  1. যোগ CoreLocation.framework BuildPhases করতে -> লাইব্রেরি সাথে লিঙ্ক বাইনারি (আর প্রয়োজনীয় উপর XCode 7.2.1 হিসাবে)
  2. CoreLocationআপনার ক্লাসে আমদানি করুন - সম্ভবত ভিউকন্ট্রোলআর সুইফট
  3. যোগ CLLocationManagerDelegateআপনার বর্গ ঘোষণা করতে
  4. যোগ NSLocationWhenInUseUsageDescriptionএবং NSLocationAlwaysUsageDescriptionplist করতে
  5. init অবস্থান পরিচালক:

    locationManager = CLLocationManager()
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
  6. এর দ্বারা ব্যবহারকারীর অবস্থান পান:

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

3
নতুন ফাংশন: ফান লোকেশন ম্যানেজার (ম্যানেজার: সিএল লোকেশন ম্যানেজার, দ্য আপডেট লোকেশন অবস্থানগুলি: [সিএল লোকেশন])
ইউজার 523234

ধাপে ধাপে উত্তর। তবে দয়া করে এটি আপডেট করুন। এটি আপাতত কাজ করছে না।
ধীররাজ

59

সুইট 5 সহ আইওএস 12.2 এর জন্য আপডেট

আপনাকে অবশ্যই প্লিস্ট ফাইলে নিম্নলিখিত গোপনীয়তার অনুমতিগুলি যুক্ত করতে হবে

<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>

এখানে আমি কেমন আছি

বর্তমান অবস্থান পাচ্ছেন এবং সুইফট ২.০ তে মানচিত্রে প্রদর্শিত হচ্ছে

আপনি আপনার প্রকল্পে 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)
    }
}

এখানে ফলাফল পর্দা

মুম্বাই কেন্দ্রিক মানচিত্রের একটি স্ক্রিনশট


আমি আপনার কোডটি চালাই এবং আমি একটি ফাঁকা সাদা পর্দা পাই। স্টোরিবোর্ডে আমার যোগ করার মতো কোনও ভিউ বা কিছু আছে?
ক্লার্ক

1
সুইফট 4-এ আমার জন্য দুর্দান্ত কাজ করেছে, কেবলমাত্র একটি আন্ডারস্কোর যুক্ত করতে হয়েছিল (এক্সকোড দ্বারা প্রম্পট করা হয়েছে) তাই লোকেশন ম্যানেজার লাইনটি পরিণত হয়েছে: func লোকেশন ম্যানেজার (_ পরিচালক: CLLocationManager, didUpdateLocations অবস্থানগুলি: [CLLocation])
লোফগ্রেন

32

লাইব্রেরি আমদানি করুন:

import CoreLocation

প্রতিনিধি সেট করুন:

CLLocationManagerDelegate

পরিবর্তনশীল যেমন নিন:

var locationManager:CLLocationManager!

ভিডিডলিডে () এই সুন্দর কোডটি লিখুন:

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

    if CLLocationManager.locationServicesEnabled(){
        locationManager.startUpdatingLocation()
    }

সিএল লোকেশন প্রতিনিধি পদ্ধতি লিখুন:

    //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)")
}

এখন লোকেশন অ্যাক্সেসের জন্য অনুমতি সেট করুন, সুতরাং আপনার তথ্য.প্লেস্ট ফাইলটিতে এই মূল মানটি যুক্ত করুন

 <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% কোনও সমস্যা ছাড়াই কাজ করছে। প্রমাণিত


আমার অন্য ভাষা আছে তবে এটি কাজ করছে না। আমি কেবল ইংরাজী ভাষা চাই।
মৌলিক শাহ

29

@ ওয়ান্ডার আমি আমার কোডের স্ক্রিনশট যুক্ত করেছি।  এটি পরীক্ষা করে দেখুন।  অনুমোদনের জন্য আপনাকে প্লাস্টে <কোড> এনএসলোকেশনএনএসইউ ইউজ ইউজেজ বিবরণ যুক্ত করতে হবে </ </ কোড>

NSLocationWhenInUseUsageDescription = অ্যাপ্লিকেশনগুলি ব্যাকগ্রাউন্ডে থাকা অবস্থায় লোকেশন পরিষেবাটি ব্যবহারের অনুমতিের জন্য অনুরোধ করুন। আপনার প্লাস্ট ফাইলের মধ্যে

যদি এটি কাজ করে তবে দয়া করে উত্তরটি দিন।


1
কোড যুক্ত করে আপনি নিজের উত্তরটি আরও ব্যাখ্যা করতে পারেন you আপনি যদি চান
প্যাটেল

16
স্ক্রিনশট পেস্ট করার চেয়ে মার্কআপ ল্যাঙ্গুয়েজ ব্যবহার করে কোড স্নিপেটটি পেয়ে ভাল লাগবে
নিকোলাস অলিও

25

প্রথম আমদানি করলোকেশন এবং ম্যাপকিট লাইব্রেরি:

import MapKit
import CoreLocation

CLLocationManagerDelegate থেকে আমাদের ক্লাসে উত্তরাধিকারী হন

class ViewController: UIViewController, CLLocationManagerDelegate

একটি লোকেশন ম্যানেজার ভেরিয়েবল তৈরি করুন, এটি আপনার অবস্থানের ডেটা হবে

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()

আপনি সুনির্দিষ্টভাবে সংজ্ঞায়িত করেছেন ব্যবহারকারী লোট্যাটিন থেকে ব্যবহারকারীদের সমন্বয় পেতে:

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)

আপনার ফাংশন বন্ধ করুন }

আপনার বোতাম বা অন্য কোনও উপায় থেকে আপনি লোকেশনম্যানেজারডেলিগেটকে নিজের মধ্যে সেট করতে চান

এখন অবস্থানটি দেখানোর অনুমতি দিন

নির্ভুলতা মনোনীত

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)

    }
}

20

সুইফট 3.0

আপনি যদি মানচিত্রে ব্যবহারকারীর অবস্থানটি না দেখাতে চান তবে এটি কেবল ফায়ারবেস বা অন্য কোথাও সংরক্ষণ করতে চান তবে এই পদক্ষেপগুলি অনুসরণ করুন,

import MapKit
import CoreLocation

এখন আপনার ভিসিতে CLLocationManagerDelegate ব্যবহার করুন এবং আপনাকে নীচে দেখানো শেষ তিনটি পদ্ধতি ওভাররাইড করতে হবে। আপনি দেখতে পারেন কীভাবে অনুরোধের অবস্থান () পদ্ধতিটি আপনাকে এই পদ্ধতিগুলি ব্যবহার করে বর্তমান ব্যবহারকারীর অবস্থান পাবে।

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)")
}

}

ব্যবহারকারী একবার আপনার অ্যাপ্লিকেশানে সাইন ইন করলে এখন আপনি নীচের কলটি কোড করতে পারেন। যখন অনুরোধলোকেশন () অনুরোধ করা হবে তখন এটি উপরে ডু-আপডেটলোকেশনগুলি আরম্ভ করবে এবং আপনি অবস্থানটি ফায়ারবেস বা অন্য কোথাও সঞ্চয় করতে পারবেন।

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

আপনি যদি জিওফায়ার ব্যবহার করে থাকেন তবে উপরের ডুপআপেটলোকেশন পদ্ধতিতে আপনি নীচের মতো লোকেশনটি সঞ্চয় করতে পারেন

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. 

সর্বশেষে তবে সর্বনিম্ন নয়, আপনার তথ্য.প্লেস্টে যান এবং "ব্যবহারের বিবরণ ব্যবহারের সময় গোপনীয়তা-অবস্থান" সক্ষম করুন।

আপনি যখন পরীক্ষার জন্য সিমুলেটর ব্যবহার করেন তখন সর্বদা আপনাকে এমন একটি কাস্টম অবস্থান দেয় যা আপনি সিমুলেটর -> ডিবাগ -> অবস্থানটিতে কনফিগার করেছেন।


হাই, অবস্থানগুলি কোথায় (দ্রাঘিমাংশ, অক্ষাংশ), কত ঘন ঘন লোকেশন পুনরায় লোড করা হয়?
ক্রিশ্চিয়ান মোরা

@ ক্রিশ্চিয়ানমোড়া যখন লোকেশনম্যানেজার.আরএকুয়েস্টলোকেশনটি আহ্বান করা হয়, এটি লোকেশন ম্যানেজার (_ পরিচালক: সিএল লোকেশন ম্যানেজার, ডু ইউপডেটলোকেশন অবস্থানগুলি: [সিএল লোকেশন]) যেখানে এটি একটি অবস্থানের অ্যারে থাকে এবং আপনি তার মধ্যে একটি ব্যবহার করতে পারেন বা ব্যবহারকারীকে সবচেয়ে উপযুক্ত বাছাই করতে দেখান। অবস্থানগুলি সিএললোকেশন টাইপের এবং আপনি এই বস্তুটি থেকে দ্রাঘিমাংশ, অক্ষাংশ পেতে পারেন you যদি আপনাকে কেবলমাত্র একবার ব্যবহারকারীর তথ্য প্রয়োজন হয় তবে আপনাকে পুনরায় লোডের প্রয়োজন হবে না অন্যথায় আপনি প্রয়োজন হিসাবে অনুরোধলোকেশন () কল করতে পারেন। অনুসন্ধানের অনুরোধের উদাহরণ হিসাবে আপনি প্রথমে অনুরোধকে লোকেশন () কল করুন এবং তারপরে অবস্থানের ভিত্তিতে উত্তর দিন।
লিজু আমি এডউইনসন

15

প্রথমে আপনার প্রকল্পে দুটি ফ্রেমওয়ার্ক যুক্ত করুন

1: ম্যাপকিট

2: মূল স্থান ( এক্সকোড 7.2.1 হিসাবে আর প্রয়োজন নেই)

আপনার ক্লাসে সংজ্ঞা দিন

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

তারপরে ভিউডিডলড পদ্ধতি কোডটিতে এটি

manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()

//Setup our Map View
mapobj.showsUserLocation = true

plist ফাইল এ এই দুটি মান যুক্ত করতে ভুলবেন না

1: NSLocationWhenInUseUsageDescription

2: NSLocationAlwaysUsageDescription

11
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হওয়ায় ব্যবহারকারী অনুমতি প্রদান বা এটি প্রত্যাখ্যান করার পরে অ্যাপটি ফাংশনটি কল করে । সুতরাং ব্যবহারকারীর অনুমতি মঞ্জুর করে আপনার অবস্থানের কোডটি সেই ফাংশনের ভিতরে রাখা ঠিক। এটি এটির সেরা টিউটোরিয়াল এটি আমি পেয়েছি


10
 override func viewDidLoad() {

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

এটি আপনার ভিউ লোড পদ্ধতিটি করেছে এবং ভিউকন্ট্রোলার ক্লাসে ম্যাপস্টার্ট আপডেট করার পদ্ধতিটি নীচে অন্তর্ভুক্ত করে

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.Framework যোগ করতে ভুলবেন না (আর প্রয়োজনীয় হিসাবে উপর XCode 7.2.1 )


6

ব্যবহার:

ক্লাসে ক্ষেত্রের সংজ্ঞা দিন

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()
    }
}


তথ্য.পিস্টে "NSLocationWhenInUseUsageDescription" যুক্ত করতে ভুলবেন না।


1
ধন্যবাদ! তথ্য.পুলিস্টে "NSLocationWhenInUseUsageDescript" যুক্ত করতে ভুলবেন না
জোনাস ডিশেলম্যান

2
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)")
        }
    }
}

0

এখানে আমার জন্য কাজ করা একটি অনুলিপি উদাহরণ রয়েছে।

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)")
    }
}

-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)

-1

আইওএস সুইফট 4 এ 100% কাজ করছেন লিখেছেন: পারমার সাজ্জাদ

পদক্ষেপ 1: গুগল ডেডোপোপার এপি কনসোল এ যান এবং আপনার অ্যাপিকে তৈরি করুন

পদক্ষেপ 2: গোটো প্রকল্প কোকোপডস গুগল্যাপস পড ইনস্টল করুন

পদক্ষেপ 3: গোটো অ্যাপডেলিগেট.সুইফ্ট Google মানচিত্রগুলি আমদানি করে

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    GMSServices.provideAPIKey("ApiKey")
    return true
}

পদক্ষেপ 4: ইউআইকিট আমদানি গুগলম্যাপস শ্রেণি ভিউকন্ট্রোলার: ইউআইভিউকন্ট্রোলার, সিএল লোকেশনম্যানেজারডিজিয়েট {

@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: ফাইলটি খুলুন এবং নীচের গোপনীয়তা যুক্ত করুন - অবস্থান যখন ব্যবহারের ব্যবহারের বিবরণ ব্যবহার করবে ...... একটি মূল স্টোরিবোর্ড ফাইলের ভিত্তির নামের নীচে

পদক্ষেপ 6: রান করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.