先放代码,源码地址在 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.
网友评论