用Swift语言使用IOS百度地图(折线的使用方法很特别)

本文详细介绍了如何使用Swift语言集成百度地图iOS SDK,包括地图展示、密钥申请、添加标注和绘制折线的方法。通过示例代码展示了在Swift项目中设置地图、开启交通图和热力图,以及自定义BMKMapViewDelegate来实现折线图形的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

本文旨在讲解如何使用Swift语言单独集成百度地图的SDK

前言

百度地图iOS SDK是一套基于armv7、armv7s、arm64(自v2.5.0版本)处理器设备的应用程序接口,不仅提供构建地图的基本接口,还提供POI搜索、地理编码、路线规划、定位、本地覆盖物绘制等服务,自v2.0.0开始为矢量渲染的3D地图,并新增了矢量离线地图下载功能接口。

您可以使用百度地图iOS SDK开发适用于移动设备的地图应用,通过接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。百度地图iOS SDK提供的功能如下:

地图:提供地图展示和地图操作功能;

POI检索:支持周边检索、区域检索和城市内兴趣点检索;

地理编码:提供经纬度和地址信息相互转化的功能接口;

线路规划:支持公交、驾车、步行三种方式的线路规划;

覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息;

定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式);

离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果;

导航:支持调启百度地图客户端导航和调启Web页面导航(H5导航);

LBS云检索:支持查询存储在LBS云内的自有数据;

特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用;


百度地图是我使用LBS应用中开放度最高的地图之一了,但是这样的一个便捷好用SDK却没有一个完整好用的Swift的Demo教程,确实很让人伤心,百度没有跟随苹果的节奏,给我们开发者带来了一些不便,我的这篇文章旨在方便同道中人共同探讨学习。

编辑器版本

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文件中写入以下文件

#import "BMapKit.h"





参考百度的库文件引入,倒入相关包



导入成功后,我们就开始我们的HelloBaiduMap

在将要显示的地图的界面的viewDidLoad方法中中初始化地图管理器,并设置地图

百度的写法

在您的AppDelegate.h文件中添加BMKMapManager的定义

@interface BaiduMapApiDemoAppDelegate : NSObject <UIApplicationDelegate> {   
       UIWindow *window;    
       UINavigationController *navigationController;     
       BMKMapManager* _mapManager;    
}

在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权Key,示例如下

- (BOOL)application:(UIApplication *)application   
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 要使用百度地图,请先启动BaiduMapManager  
    _mapManager = [[BMKMapManager alloc]init];   
// 如果要关注网络及授权验证事件,请设定     generalDelegate参数  
    BOOL ret = [_mapManager start:@"在此处输入您的授权Key"  generalDelegate:nil];  
    if (!ret) {  
        NSLog(@"manager start failed!");  
    }  
// Add the navigation controller's view to the window and display.  
    [self.window addSubview:navigationController.view];  
    [self.window makeKeyAndVisible];  
   return YES;  
}

我们的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方法,以实现和地图的交互


2、添加显示的标注信息



3、添加显示标注的涂层


最终显示结果




好了接下来我们来实现一个折线图形,这个方法和我们平时用的时候是不一样的

这个代码片段是百度提供的

- (void)viewDidLoad {     
    [super viewDidLoad];    
    // 添加折线覆盖物    
    CLLocationCoordinate2D coors[2] = {0}; 
    coors[0].latitude = 39.315; 
    coors[0].longitude = 116.304;
    coors[1].latitude = 39.515; 
    coors[1].longitude = 116.504;
    BMKPolyline* polyline = [BMKPolyline polylineWithCoordinates:coors count:2];
    [_mapView addOverlay:polyline];    
}    
// Override    
- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay{    
   if ([overlay isKindOfClass:[BMKPolyline class]]){    
        BMKPolylineView* polylineView = [[[BMKPolylineView alloc] initWithOverlay:overlay] autorelease];    
        polylineView.strokeColor = [[UIColor purpleColor] colorWithAlphaComponent:1];
        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

    }


效果显示如图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值