在给定坐标附近,在 Swift、MapKit 和核心定位中打印 hello

Posted

技术标签:

【中文标题】在给定坐标附近,在 Swift、MapKit 和核心定位中打印 hello【英文标题】:Near given coordinates, print hello in Swift, MapKit and corelocation 【发布时间】:2016-05-09 17:02:16 【问题描述】:

我想知道如何检查人是否在某个坐标附近,然后在控制台中执行诸如问好之类的操作以进行测试。现在我已经有了用户位置,每次人移动时它都会更新,但是如何知道他是否在某个坐标或地址附近?例如:

func sayHello()
if mapView.userLocation.coordinate.latitude == 26
print("Hello")

我已经完成的代码:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate 

    @IBOutlet weak var mapView: MKMapView!

    let locationManager = CLLocationManager()

    override func viewDidLoad() 
        super.viewDidLoad()

        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.requestAlwaysAuthorization()
        self.locationManager.startUpdatingLocation()
        self.mapView.showsUserLocation = true



    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    
        let location = locations.last

        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.mapView.setRegion(region, animated: true)

        self.locationManager.stopUpdatingLocation()
    

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
    
        print("Errors: " + error.localizedDescription)
    

【问题讨论】:

【参考方案1】:

我会在每次更新用户位置时检查用户位置与您存储的地址位置之间的距离。如果用户在 x 米内,则打印“Hello”。

下面是我用来获取用户与地址之间距离的代码。如果您有一个包含地址及其坐标的对象数组,您可以遍历每个地址并为 x 米内的每个地址打印 Hello。

let userLocation:CLLocation = CLLocation(latitude: 10.000, longitude: 29.000)
let addressLocation:CLLocation = CLLocation(latitude: 15.000, longitude: 20.000)
let meters:CLLocationDistance = userLocation.distanceFromLocation(addressLocation)

【讨论】:

如果我理解 U 正确,那么“userLocation”是我给定的坐标,“addressLocation”是人可以离这些坐标多远?所以让我们假设我的坐标是 58.369015901(纬度)和 26.717840259(经度)。如果我与给定坐标相距 15.000(纬度)和 20.000(经度),它会打印出“Hello”?我可以将这些坐标四舍五入多少? 假设您有用户 A 和餐厅 B。如果用户 A 在餐厅 B 100 米范围内,您要打印 Hello。userLocation 是用户 A 的坐标。addressLocation 是餐厅 B 的坐标。然后使用 distanceFromLocation 获取 userLocation 和 addressLocation 之间的距离(以米为单位)。您将其存储在米常数中。您不需要四舍五入坐标。只需将它们存储为 Double。 哇,我差点抓住你了。这么晚了,脑力工作太多了。所以如果我说:如果米 == 5 这意味着用户 A 可以距离餐厅 B 5 米,它仍然会打印出“你好”? 我会按照以下方式做一些事情......如果米 【参考方案2】:

获取两个坐标之间的距离,如果小于5m,则匹配显示打印语句

CLLocation *locA = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];

 CLLocation *locB = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2];

 CLLocationDistance distance = [locA distanceFromLocation:locB];

【讨论】:

以上是关于在给定坐标附近,在 Swift、MapKit 和核心定位中打印 hello的主要内容,如果未能解决你的问题,请参考以下文章

Swift MapKit - MapView 中不显示注释

在 Google 地图上绘制一组给定坐标附近的坐标

CoreData MapKit Swift 3

MKMapView 不读取给定坐标

在 MapKit 中为附近的地方(例如比萨店)添加图钉

在 Swift 中使用数组简化代码(核心位置)