美文网首页iOS Developer
更简单优雅的使用地图(MapKit、高德、百度)

更简单优雅的使用地图(MapKit、高德、百度)

作者: ghysrc | 来源:发表于2017-01-14 17:55 被阅读142次

    先放代码,源码地址在 Github 上,欢迎 Star.

    因为当前在做的项目严重依赖于地图,定位、反编码、POI、自定义绘制等等全部都用到了,又因为一些特殊的需求,同样的功能用市面上常见的地图都试了个遍。
    我发现各个 SDK 的设计都是很相像的,有时甚至只是前缀不一样而已。而因为前缀的不同,每换个地图都要重新写很多看起来几乎一样的代码。初始化、实现协议、在回调里面做处理,以下是一份最简单实现定位功能的代码。

    class ViewController: UIViewController, CLLocationManagerDelegate 
    ...
    let clManager = CLLocationManager()
    clManager.distanceFilter = kCLLocationAccuracyHundredMeters
    clManager.desiredAccuracy = 100
    clManager.delegate = self
    clManager.startUpdatingLocation()
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        // Do something
    }
        
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        
    }
    

    代码不能说多,但写的时候不可避免的会来回切换几次。总感觉不够简单、不够优雅,如果能用一行代码就实现定位功能就好了。
    所以,我对 API 进行了二次封装,用一行代码实现大部分常用功能,同时支持 MapKit、高德、百度。

    定位

    Map.getLocation(onSuccess: { (location) in
        // Do something
    }) { (error) in
        
    }
    

    位置编码、反编码

    BMap.geocoder(address: "somewhere", city: "", onSuccess: { (result) in
                
    }) { (errorCode) in
                
    }
    
    BMap.reverseGeocoder(coordinate: coordinate, onSuccess: { (result) in
        
    }) { (errorCode) in
        
    }
    

    输入提示

    AMap.searchInputTips(keywords: "plaza", onSuccess: { (response) in
        
    }, onFail: { (error) in
        
    })
    

    POI 检索

    BMap.searchPoi(near: coordinate, radius: 1000, keyword: "hotel", onSuccess: { (result) in
        
    }, onFail: { (errorCode) in
        
    })
    

    各个地图服务的使用方式只是前缀稍有不同,方法名都是一样的

    有什么需要的功能或发现问题欢迎提 Issue.

    相关文章

      网友评论

        本文标题:更简单优雅的使用地图(MapKit、高德、百度)

        本文链接:https://www.haomeiwen.com/subject/hwiebttx.html