引入头文件:
import MapKit
import CoreLocation
添加代理CLLocationManagerDelegate
===========定位(一次定位、持续定位、使用期间定位、后台定位)=======
func mapLocation(){
locationManager=CLLocationManager.init()
//在使用期间发定位请求
if (locationManager?.responds(to: #selector(CLLocationManager.requestWhenInUseAuthorization)))!{
locationManager?.requestWhenInUseAuthorization()
// locationManager?.requestAlwaysAuthorization()//永久定位
}
/* iOS9新特性: 临时获取后台定位
当使用了使用期间授权时,可以在需要后台定位的地方,添加allowsBackgroundLocationUpdates属性,并设置为true.同时还需要打开后台定位模式 -->点击项目-->Capabilitys-->Background Modes-->勾选Location update
不用设置永久定位,此时就可以进行临时获取后台定位信息,但是屏幕上会有蓝条信息显示
*/
locationManager?.allowsBackgroundLocationUpdates=true//允许后台定位
locationManager?.delegate=self
//距离筛选器
locationManager?.distanceFilter=10//位置移动10米以上才待用位置更新的代理方法
locationManager?.desiredAccuracy=kCLLocationAccuracyKilometer//金准度
// 比较2个位置之间的距离比较的是直线距离
let l1:CLLocation=CLLocation.init(latitude: 40.06, longitude: 116.39)
let l2:CLLocation=CLLocation.init(latitude: 30.06, longitude: 116.39)
let distance:CLLocationDistance=l1.distance(from: l2);//l1距离l2的距离
locationManager?.startUpdatingLocation()//开始定位
}
//完成定位---// 当完成位置更新的时候调用
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
//locations: 位置信息数据
print("\(locations)")
// 停止定位( 如果不 停止定为就是持续定位)
locationManager?.stopUpdatingHeading()
}
==============地理编码和反地理编码===========
引入import CoreLocation
*****
//地理编码:把地名转换成经纬度,可能会出现一对多的情况;
func geocoderClick(){
//创建地理编码对象
let geo:CLGeocoder=CLGeocoder.init()
//placemarks: 地标对象
// //CLPlacemark中有CLLocation(可以获得经纬度),region,街道名称,城市,州很多信息。
geo.geocodeAddressString("这里写入地址") { (placemarks, error) in
for placemark:CLPlacemark in placemarks!{
if (placemarks?.count==0)||(error != nil){
print("解析出错")
}
//获取经纬度等信息
print(placemark.location?.coordinate.latitude as Any)
//详细地址
print(placemark.name as Any)
//城市
print(placemark.locality as Any)