swift 之使用系统的地图

这篇博客介绍了如何在Swift中使用MapKit和CoreLocation框架进行地图集成。首先,你需要导入MapKit和CoreLocation库,并设置CLLocationManagerDelegate代理。接着,博客详细讲解了定位功能,包括一次定位、持续定位、使用期间定位和后台定位。此外,还讨论了地理编码和反地理编码的实现,将地名转换为经纬度。最后,文章阐述了如何作为MKMapViewDelegate来基本使用地图,并添加大头针到地图上。
摘要由CSDN通过智能技术生成

引入头文件:

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)

            
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值