本文分为三部分,第一部分详解用Swift语言开发LBS应用,并给出完整的示例与源代码;第二部分介绍如何申请LBS密钥,第三部分是综合示例查看,扫描二维码即可查看示例demo。

第一部分 使用Swift语言开发LBS应用

1、下载iOS地图SDK的最新版本,地址:http://lbs.amap.com/api/ios-sdk/down/

2、申请LBS密钥(见第二部分)。

3、xCode新建工程

新建一个 Single View Application 工程。注意:Language 选择 Swift

4、工程配置

a.引入地图库&搜索库

左侧目录中选中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries 中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择解压后的 MAMapKit.framework 文件添加到工程中。

搜索库的添加方法同上。

b.引入AMap.bundle资源文件

AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。

左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从 MAMapKit.framework->Resources 文件夹中选择 AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

c.引入系统库

左侧目录中选中工程名,在TARGETS->Build Settings-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中查找并选择所需的库(见下表),单击“Add”按钮,将库文件添加到工程中。

说明:

备注中,2D表示使用2D栅格地图需要的系统文件,3D表示使用3D矢量地图需要的系统文件、Search表示使用搜索库需要的系统文件。

SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是为了统计app信息使用。

d.Swift编译配置

首先:新建桥接头文件(放在工程路径下),这里命名为 AMapDemoSwift-Bridging-Header.h,在该头文件中import需要的库文件,代码如下:

#import <MAMapKit/MAMapKit.h>
#import <AMapSearchKit/AMapSearchAPI.h>

然后,左侧目录中选中工程名,在 TARGETS->Build Phases-> Swift Compiler - Code Generation -> Objective-C Briding Header 中输入桥接文件的路径

5、地图的显示

以3D矢量地图SDK为例,进行介绍。

在 ViewController.swift 中,继承 MAMapViewDelegate 协议,在 viewDidLoad 方法中配置用户Key,初始化 MAMapView 对象,并添加到 Subview中。代码如下:

let APIKey = "8a1383b14466a8dbf362f44357c496c0"class ViewController: UIViewController , MAMapViewDelegate{var mapView:MAMapView?override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.// 配置用户KeyMAMapServices.sharedServices().apiKey = APIKey// 初始化MAMapView
        initMapView()}func initMapView(){mapView = MAMapView(frame: self.view.bounds)mapView!.delegate = selfself.view.addSubview(mapView!)}
}

运行程序,地图显示出来了,就是这样简单~

6、一个实用的例子

逆地理编码为例,写一个完整的示例。实现步骤如下:

(1) 初始化主搜索对象AMapSearchAPI,并继承搜索协议 AMapSearchDelegate 。

(2) 构造 Request 对象,配置搜索参数。

(3) 通过主搜索对象以 Request 对象为参数,发起搜索。

(4) 实现搜索协议中对应的回调函数,通过解析 Response 对象获取搜索结果。

通过定位获取当前位置的经纬度,在点击定位标注(小蓝点)时,进行逆地理编码,在弹出的气泡中显示定位点的地址。实现该场景有以下几个步骤:

1.开启定位,显示定位标注(小蓝点)。

2.在定位的回调函数中获取定位点的经纬度。

3.点击定位标注,执行逆地理编码查询。

4.在逆地理编码回调中设置定位标注的title和subtitle。

全部源代码:

import UIKitlet APIKey = "8a1383b14466a8dbf362f44357c496c0"class ViewController: UIViewController ,MAMapViewDelegate, AMapSearchDelegate{var mapView:MAMapView?var search:AMapSearchAPI?var currentLocation:CLLocation?override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.
         MAMapServices.sharedServices().apiKey = APIKeyinitMapView()initSearch()}func initMapView(){mapView = MAMapView(frame: self.view.bounds)mapView!.delegate = selfself.view.addSubview(mapView!)let compassX = mapView?.compassOrigin.xlet scaleX = mapView?.scaleOrigin.x//设置指南针和比例尺的位置mapView?.compassOrigin = CGPointMake(compassX!, 21)mapView?.scaleOrigin = CGPointMake(scaleX!, 21)// 开启定位mapView!.showsUserLocation = true// 设置跟随定位模式,将定位点设置成地图中心点mapView!.userTrackingMode = MAUserTrackingModeFollow}// 初始化 AMapSearchAPI
    func initSearch(){search = AMapSearchAPI(searchKey: APIKey, delegate: self); }// 逆地理编码
    func reverseGeocoding(){let coordinate = currentLocation?.coordinate// 构造 AMapReGeocodeSearchRequest 对象,配置查询参数(中心点坐标)let regeo: AMapReGeocodeSearchRequest = AMapReGeocodeSearchRequest()regeo.location = AMapGeoPoint.locationWithLatitude(CGFloat(coordinate!.latitude), longitude: CGFloat(coordinate!.longitude))println("regeo :\(regeo)")// 进行逆地理编码查询self.search!.AMapReGoecodeSearch(regeo)}// 定位回调func mapView(mapView: MAMapView!, didUpdateUserLocation userLocation: MAUserLocation!, updatingLocation: Bool) {if updatingLocation {currentLocation = userLocation.location         }}// 点击Annoation回调func mapView(mapView: MAMapView!, didSelectAnnotationView view: MAAnnotationView!) {// 若点击的是定位标注,则执行逆地理编码if view.annotation.isKindOfClass(MAUserLocation){reverseGeocoding()}}// 逆地理编码回调func onReGeocodeSearchDone(request: AMapReGeocodeSearchRequest!, response: AMapReGeocodeSearchResponse!) {println("request :\(request)")println("response :\(response)")if (response.regeocode != nil) {var title = response.regeocode.addressComponent.cityvar length: Int{return countElements(title)}if (length == 0){title = response.regeocode.addressComponent.province}//给定位标注的title和subtitle赋值,在气泡中显示定位点的地址信息      mapView?.userLocation.title = titlemapView?.userLocation.subtitle = response.regeocode.formattedAddress}}
}

全部源码下载:https://github.com/hadesh/MyRoute

第二部分 如何申请LBS密钥

1、访问申请KEY地址:http://lbs.amap.com/console/key/

2、输入真实应用名称,选择iOS SDK平台服务。

3、获取Bundle Indentifier

获取方式一、代码获取

NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];

获取方式二、Xcode切换到General标签,查看Bundle Identifier

4、点击获取KEY按钮。

第三部分 查看示例

---------------------------------------------------------------------------------------------------------------------------------

即日起至2016/10/31止,凡注册成为高德开发者的新用户,即可获赠1张阿里云优惠券,可享受最低6折购买阿里云产品。数量有限,发完即止。详情点击:http://lbsbbs.amap.com/forum.php?mod=viewthread&tid=20143

---------------------------------------------------------------------------------------------------------------------------------

【iOS开发】如何用 Swift 语言进行LBS应用的开发?相关推荐

  1. [iOS] 完整源码, Swift语言 - 账号保存工具

    代码地址如下: http://www.demodashi.com/demo/15017.html 1. 需求分析 作为一个开发者,平时肯定在各个平台,网站注册了各种账号:由于太多,很多时候都是注册之后 ...

  2. IOS开发入门之一——Swift语言基础

    需要iOS视频资料可以加我微信: 1914532832  验证信息请注明:IOS开发 很多新人对IOS开发很迷茫,不知道从何下手?看完本系列,你将会觉得IOS入门其实很简单.要学习IOS开发,当然是先 ...

  3. 如何用 Swift 语言构建一个自定控件

    本文译自:How To Make a Custom Control in Swift 用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它们与应用程序进行交互. ...

  4. 开发语音录入_语言翻译小程序app开发 解决了人们的语言障碍问题

    随着经济的发展,人们经济水平的提高,促进了国际交流越来越频繁,人们出国的次数也是越来越多.但是语言交流也是日常的障碍,给诸多的人带来不便.出国旅游要是语言不通还会影响旅游质量.语言翻译小程序的开发,便 ...

  5. cad二次开发 java_应用Java语言进行AutoCAD2000二次开发.PDF

    应用Java语言进行AutoCAD2000二次开发 实用第一 智慧密集 刘良华袁英战朱东海 摘 要 介绍了应用Java语言进行AutoCAD二次开发的方法和思路. 关键字 二次开发,AutoCAD定制 ...

  6. iOS推送小结--swift语言

    APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的 ...

  7. Auto CAD二次开发:基于VBA语言的画圆软件开发

    本文已经首发在个人微信公众号:工业机器人仿真与编程(微信号:IndRobSim),欢迎关注! 不仅是CATIA软件具有VBA二次开发接口,很多机械设计软件也都具有VBA二次开发接口.本期,就来为大家介 ...

  8. IOS开发笔记(Swift):UITableView表格视图的静态使用

    2019独角兽企业重金招聘Python工程师标准>>> 最近一段时间都在准备IOS的开发,学习swift语言,之前做过很多类型的开发:前端.Java Web..net.Android ...

  9. Swift 语言快速入门

    Swift 语言快速入门 简单值 控制流 函数闭包 对象和类 枚举和结构体 协议和拓展 错误处理 泛型 由于项目原因,需要做一款 iOS 应用...然后这个任务就落到了我身上-emm 经过我的全方面了 ...

最新文章

  1. 转:动态链接库的全局变量问题
  2. it oracle 培训,Oracle数据库技术培训_OracleDBA数据库工程师_Oracle数据库在线学习视频教程_IT职业培训-51CTO学院_精培学院...
  3. oracle查询重复数据出现次数
  4. C#基础_值类型引用类型(十一)
  5. ASP.NET Core DevOps
  6. python 模块和包
  7. svg 动画_根据AI导出的SVG path制作SVG线条动画
  8. HTTP----HTTP2.0新特性
  9. 11-windows下卸载Orcale
  10. 微软面试题:写程序找出二叉树的深度
  11. 小米手机微信指纹支付上传服务器吗,小米MIUI支持微信指纹支付吗 小米MIUI微信指纹支付【图文】...
  12. 【干货】人工智能专业重要词汇表(红宝书)
  13. 英语中的开音节,闭音节
  14. LSB文本水印的嵌入与提取
  15. 第三--JVM与线程
  16. java excel 列_java 如何操作excel 插入一列
  17. 谷粒学院笔记-第二天-数据库设计
  18. 几个好用的邮件伪造工具
  19. wordpress后台管理(八)外观-小工具:管理常用的DUX主题附带的小工具或wordpress自带的小工具
  20. 在使用uglify是出现:.pipe(uglify()) SyntaxError:Unexpected token .

热门文章

  1. 三星linux打印机驱动官网下载,三星SL-C515驱动
  2. nignx解决vue部署服务器刷新页面出现404问题
  3. Java 实现HTML 页面转成image 图片
  4. JQuery 快速入门一篇通
  5. 四川大学计算机学院琚生根教授,基于卷积神经网络和自注意力机制的文本分类模型...
  6. java可以做网页吗_如果我用java 只会做网页,那么我会不会被淘汰?
  7. android短信模板,短信服务 · Android – Bmob后端云
  8. oracle同机单实例加入集群,将oracle同机单实例加入rac集群的操作步骤
  9. MATLAB图像处理之图像边缘提取
  10. Spring Cloud 服务治理