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

先放代码,源码地址在 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
    
})

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

  • Map = MapKit
  • AMap = 高德地图
  • BMap = 百度地图

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

你可能感兴趣的:(更简单优雅的使用地图(MapKit、高德、百度))