摘要
本文旨在讲解如何使用Swift语言单独集成百度地图的SDK
前言
百度地图iOS SDK是一套基于armv7、armv7s、arm64(自v2.5.0版本)处理器设备的应用程序接口,不仅提供构建地图的基本接口,还提供POI搜索、地理编码、路线规划、定位、本地覆盖物绘制等服务,自v2.0.0开始为矢量渲染的3D地图,并新增了矢量离线地图下载功能接口。
您可以使用百度地图iOS SDK开发适用于移动设备的地图应用,通过接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。百度地图iOS SDK提供的功能如下:
地图:提供地图展示和地图操作功能;
POI检索:支持周边检索、区域检索和城市内兴趣点检索;
地理编码:提供经纬度和地址信息相互转化的功能接口;
线路规划:支持公交、驾车、步行三种方式的线路规划;
覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息;
定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式);
离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果;
导航:支持调启百度地图客户端导航和调启Web页面导航(H5导航);
特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用;
编辑器版本
XCode Version 6.2 (6C131e)
BaiduMap_IOSSDK_v2.6.0_All
下载地址
http://developer.baidu.com/map/index.PHP?title=iossdk/sdkiosdev-download
duang的一声地图演示开始
一、申请密匙
至于密匙如何申请请大家参考百度的密匙申请文档,这点我就跳过不提了
密匙申请地址
http://lbsyun.baidu.com/apiconsole/key
二、地图使用
新建一个项目叫SimpleMovie
因为我们使用的Swift,而百度地图使用的全部是以前的ObjectC开发的,所以我们需要引入一个ObjectC写的文件,并把其中的一个实现文件(后缀名为m的)的后缀名改为mm的
在SimpleMovie-Bridging-Header.h文件中写入以下文件
参考百度的库文件引入,倒入相关包
导入成功后,我们就开始我们的HelloBaiduMap
在将要显示的地图的界面的viewDidLoad方法中中初始化地图管理器,并设置地图
百度的写法
在您的AppDelegate.h文件中添加BMKMapManager的定义
@interface BaiduMapApiDemoAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; UINavigationController *navigationController; BMKMapManager* _mapManager; }
在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权Key,示例如下
我们的Swift写法
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view,typically from a nib.
self.navigationItem.title = "在线影院"
// 初始化地图管理器
self.mapManager = BMKMapManager()
// 地图管理器是否初始化成功
var ret = mapManager.start("填入你申请的key",generalDelegate: nil)
// 初始化地图
self.mapView = BMKMapView(frame: CGRect(x: 0,y: 0,width: 320,height: 480))
self.view = mapView;
}
好了我们的地图就可以显示了,当然你也可以设置一些参数,比如说时地图中心,缩放等级。。。
如果想要开启挤出适量图和卫星图就可以这样设置,当然百度地图默认的是基础矢量图
// BMKMapTypeStandard = 1,// < 标准地图
// BMKMapTypeSatellite = 2,// < 卫星地图
// self.mapView.mapType = 2 //在这里无法使用这两种类型,只能使用数字代替
开启实时交通图
// self.mapView.trafficEnabled = true //打开实时交通图
// self.mapView.trafficEnabled = false //关闭实时交通图
打开城市热力图
self.mapView.baiduHeatMapEnabled = true //打开城市热力图
// self.mapView.baiduHeatMapEnabled = false//关闭城市热力图
好了我们需要关注的东西来了“地图标注”
1、首先我们显示地图的这个类需要实现BMKMapViewDelegate方法,以实现和地图的交互
最终显示结果
好了接下来我们来实现一个折线图形,这个方法和我们平时用的时候是不一样的
(void)viewDidLoad { [super viewDidLoad; // 添加折线覆盖物 CLLocationCoordinate2D coors[2] {0}; coors].latitude = 39.315longitude 116.304; coors139.515116.504; BMKPolyline* polyline [BMKPolyline polylineWithCoordinates:coors count:; [_mapView addOverlay:polyline} // Override (BMKOverlayView )mapView(BMKMapView )mapView viewForOverlay(id <BMKOverlay>)overlay{ ([overlay isKindOfClass[BMKPolyline class]){ BMKPolylineView* polylineView [BMKPolylineView alloc] initWithOverlay:overlay] autorelease; polylineView.strokeColor [UIColor purpleColor] colorWithAlphaComponent; polylineView.lineWidth 5.0; return polylineView; } return nil}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view,typically from a nib.
self.navigationItem.title = "在线影院"
// 初始化地图管理器
self.mapManager = BMKMapManager()
// 地图管理器是否初始化成功
var ret = mapManager.start("填入你申请的key",generalDelegate: nil)
// 初始化地图
self.mapView = BMKMapView(frame: CGRect(x: 0,y: 0,width: 320,height: 480))
self.view = mapView;
// 添加折线覆盖物
var coor1_latitude:CLLocationDegrees = 39.915
var coor1_longitude:CLLocationDegrees = 116.404
var coor1:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: coor1_latitude,longitude: coor1_longitude)
var coor2_latitude:CLLocationDegrees = 39.515
var coor2_longitude:CLLocationDegrees = 116.504
var coor2:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: coor2_latitude,longitude: coor2_longitude)
var c:[CLLocationCoordinate2D] = []
c.append(coor1)
c.append(coor2)
//这里的参数Coordinate用法是用的C语言的指针方式,具体请参考苹果官网给出的解释
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html
var polyLine:BMKPolyline = BMKPolyline(coordinates: &c,count: 2)
self.mapView.addOverlay(polyLine)
}
func mapView(mapView: BMKMapView!,viewForOverlay overlay: BMKOverlay!) -> BMKOverlayView! {
if overlay.isKindOfClass(BMKPolyline){
var polyLineView:BMKPolylineView = BMKPolylineView(overlay: overlay)
polyLineView.strokeColor = UIColor.purpleColor()
polyLineView.lineWidth = 5.0
return polyLineView
}
return nil
}