摘要

本文旨在讲解如何使用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.viewwindow 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].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

}


效果显示如图

用Swift语言使用IOS百度地图折线的使用方法很特别的更多相关文章

  1. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 移动端Html5中百度地图的点击事件

    这篇文章主要介绍了移动端Html5中百度地图的点击事件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – 无法识别的选择器发送到实例NSTimer Swift

    解决方法让updateTime成为一个类方法.如果它是在一个纯粹的Swift类中,你需要在@objc前面说明该方法的声明,如:

  5. ios – 为什么,将nil作为参数从Objc C发送到swift类初始化器,用新对象替换nil参数

    除非属性本身被声明为nonnull:

  6. ios – 在Swift中对MKCircle进行子类化

    我想通过添加另一个String属性来继承MKCircle,我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. ios – 类型推断(自动类型检测)如何在swift中工作?

    LLVM如何检测变量是一个字符串?

  8. ios – Swift可选项:语言问题,还是做错了什么?

    应该有可选的类型;type是但是,如果我这样做,它的工作原理:它似乎是基本的替代,但我可能会遗漏一些语言的细微差别.谁能对此有所了解?之后就像暧昧一样,更多,这是我的解决方案:这适用于所有非对象Swift对象,包括Swift字符串,数字等.感谢Viktor提醒我String不是Swift中的对象.如果您知道值的类型,您可以替换任何?使用适当的可选类型,如String?

  9. ios – 覆盖Swift中的超类委托

    我正在开发一个包含两个UIViews的Swift(v1.2)项目.MyView和MyViewSubclass.MyView有一个委托,我想在MyViewSubclass中覆盖它作为一个子协议,类似于UITableViews有一个UITableViewDelegate,它也符合超级uiscrollviewdelegate.我的第一个想法是覆盖超类属性,但这会导致编译器错误,因为子类不能覆盖具有不同类

  10. ios – AVAudioPlayer不再使用Swift 2.0/Xcode 7 beta

    对于我的iPhone应用程序中的vartestAudio声明,我在这里收到错误“调用可以抛出,但错误不能从属性初始化程序中抛出”当我转到Xcode7测试版时,就发生了这种情况.如何在Swift2.0中使用此音频剪辑?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部