关于定位 MapKit 与 CLCoreLoaction

本文介绍了如何在iOS应用中使用CoreLocation进行地理定位,并结合MapKit展示地图。首先,通过CLLocationManager进行定位管理,设置代理并请求用户授权。当定位成功后,使用CLGeocoder进行反向地理编码,获取CLPlacemark对象,从而得到详细的省市区信息。同时,别忘了在Info.plist中配置隐私权限。通过这些步骤,可以实现在应用中集成精准的地理位置服务。
摘要由CSDN通过智能技术生成

MapKit 用于地图展示
Core Location 用于地理定位
LBS : location based service 基于定位的服务

CoreLocation

定位所包含的类都在CoreLocation模块中,使用时必须导入。

CLLocationManager:定位管理器,可以理解为定位不能自己工作,需要有个类对它进行全过程管理。
CLLocationManagerDelegate:定位管理代理,不管是定位成功与失败,都会有相应的代理方法进行回调。
CLLocation:表示某个位置的地理信息,包含经纬度、海拔等。
CLPlacemark:位置信息,包含的信息如国家、城市、街道等。
CLGeocoder:地理编码。

使用方式

  • 创建CLLocationManager,设置代理并发起定位。
locationManage = CLLocationManager.init()
locationManage?.delegate = self
  • 实现CLLocationManagerDelegate中定位成功和失败的代理方法。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print(locations)
    //获取一次定位即可,获取到之后关闭定位
    manager.stopUpdatingLocation()
}
  • 在成功的代理方法中获取CLLocation对象并通过CLGeocoder进行反向地理编码获取对应的位置信息CLPlacemark。
  • 通过CLPlacemark获取具体的位置信息。

必要配置

info.plist
需要在 Info.plist 中配置Privacy - Location When In Use Usage Description。
在这里插入图片描述这样设置完后,在用户没有授权的时候可以发送一个请求:

locationManage?.requestWhenInUseAuthorization()

这样用户在进入到这个页面的时候就能够看见有关请求定位的申请,用户可以根据自身的情况进行授权。

关于定位授权状态可参考:
CLAuthorizationStatus

let status = locationManage?.authorizationStatus
switch status {
case .notDetermined,.restricted,.denied:
    locationTipLabel.text = "未取得定位服务"
case .authorizedAlways,.authorizedWhenInUse,.authorized:
    locationTipLabel.text = "在本页定位服务正在使用"
    locationManage?.startUpdatingLocation()
case .none,.some(_):
    break
}

关于获得定位CLLocation后如何得知定位所在的省市区

定位CLLocation和省市区是不在同一个类里的,可以通过CLLocation来获得省市区等地理信息,这个专门处理省市区的类就是CLPlacemark。

获得省市区信息的示范代码:

private func searchLocationData(withCLLocation location:CLLocation){
    let geocoder = CLGeocoder.init()
    geocoder.reverseGeocodeLocation(location) { placemarks, error in
        if (placemarks?.count != 0){
            let placemark = placemarks?.first
            let province = placemark?.administrativeArea
            for index in 0 ..< self.dataScource.count {
                let dicProvinceCity = self.dataScource[index]
                let dicProvinceName = dicProvinceCity["province"] as! String
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值