【iOS开发】如何用 Swift 语言进行LBS应用的开发?
本文分为三部分,第一部分详解用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.
// 配置用户Key
MAMapServices.sharedServices().apiKey = APIKey
// 初始化MAMapView
initMapView()
}
func initMapView(){
mapView = MAMapView(frame: self.view.bounds)
mapView!.delegate = self
self.view.addSubview(mapView!)
}
}
运行程序,地图显示出来了,就是这样简单~

6、一个实用的例子
以逆地理编码为例,写一个完整的示例。实现步骤如下:
(1) 初始化主搜索对象AMapSearchAPI,并继承搜索协议 AMapSearchDelegate 。
(2) 构造 Request 对象,配置搜索参数。
(3) 通过主搜索对象以 Request 对象为参数,发起搜索。
(4) 实现搜索协议中对应的回调函数,通过解析 Response 对象获取搜索结果。
通过定位获取当前位置的经纬度,在点击定位标注(小蓝点)时,进行逆地理编码,在弹出的气泡中显示定位点的地址。实现该场景有以下几个步骤:
1.开启定位,显示定位标注(小蓝点)。
2.在定位的回调函数中获取定位点的经纬度。
3.点击定位标注,执行逆地理编码查询。
4.在逆地理编码回调中设置定位标注的title和subtitle。
全部源代码:
import UIKit
let 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 = APIKey
initMapView()
initSearch()
}
func initMapView(){
mapView = MAMapView(frame: self.view.bounds)
mapView!.delegate = self
self.view.addSubview(mapView!)
let compassX = mapView?.compassOrigin.x
let scaleX = mapView?.scaleOrigin.x
//设置指南针和比例尺的位置
mapView?.compassOrigin = CGPointMake(compassX!, )
mapView?.scaleOrigin = CGPointMake(scaleX!, )
// 开启定位
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.city
var length: Int{
return countElements(title)
}
if (length == ){
title = response.regeocode.addressComponent.province
}
//给定位标注的title和subtitle赋值,在气泡中显示定位点的地址信息
mapView?.userLocation.title = title
mapView?.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应用的开发?的更多相关文章
- 如何用 Swift 语言构建一个自定控件
(via:破船之家,原文:How To Make a Custom Control in Swift) 用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它 ...
- 【IOS学习】【Swift语言】
基本语法: OS X playground 引入 import Cocoa IOS playground 引入 import UIKit 基本数据类型 let 定义常量 定义完成之后无法修改 var ...
- Swift语言从天而降,是否能掀起新一轮的科技革命?
Swift语言从天而降,是否能掀起新一轮的科技革命? Swift语言诞生到如今,才短短一个月多,Swift居然挤进TIOBE排行榜的第16位,相信这发展的速度绝不是不论什么一个语言可与之相提并论,那S ...
- 怎么让一个项目里swift与OC可以兼容混合开发?
在苹果推出了swift语言之后,很多人担心OC很快会被取代,但是苹果方面表示2年内不会摒弃OC.但现在也快了啊.有的开发团队已经开始基于swift开发,但是有很多旧的框架还没来得及用swift写出来, ...
- XCODE中使用Main.Storyboard拉入控件并实现事件(Swift语言)
如何在XCODE中的Main.Storyboard内拉入控件并实现一个简单的效果呢?本人由于刚接触Swift语言不久,对于IDE的操作还是很生疏,不懂了就在网上参考了网上前辈们的文章.以下我将演示如何 ...
- Swift语言iOS开发:CALayer十则示例
如你所知,我们在iOS应用中看到的都是视图(view),包括按钮视图.表视图.滑动条视图,还有可以容纳其他视图的父视图等. AD:[活动]Web和APP兼容性实战 Win10训练营免费报名 如你所知, ...
- 使用swift语言进行IOS应用开发
在Swift中能够直接使用Objective-C语言提供的api (包括系统框架与自己的定制代码),也能够在Objective-C中使用Swift提供的类和api ,还能够在一个工程中同时混合使用Sw ...
- iOS - Swift Swift 语言新特性
1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...
- IOS入门之Swift语言(一)
经过不断的努力,小哥也买了台苹果设备,终于可以开始我的IOS之旅了,说来确实令人苦恼,为了学习IOS我这着贫农阶级,省了几个月的零花钱,外加向亲朋好友求救,最终痛下心扉,卖了台MAC pro128G版 ...
随机推荐
- 在ASP.NET MVC中实现本地化和全球化
在开发多语言网站时,我们可以为某种语言创建一个资源文件,根据浏览器所设置的不同语言偏好,让运行时选择具体使用哪个资源文件.资源文件在生成程序集的时候被嵌入到程序集. 本篇体验,在ASP.NET MVC ...
- MySQL Workbench的安全更新模式
MySQL Workbench上使用"DELETE FROM TABLE_E;"清空一个表时返回错误: Error Code: 1175. You are using safe u ...
- Spring Boot 2.0 + zipkin 分布式跟踪系统快速入门
原文:https://www.jianshu.com/p/9bfe103418e2 注意 Spring Boot 2.0之后,使用EnableZipkinServer创建自定义的zipkin服务器已经 ...
- redis哈希缓存数据表
redis哈希缓存数据表 REDIS HASH可以用来缓存数据表的数据,以后可以从REDIS内存数据库中读取数据. 从内存中取数,无疑是很快的. var FRedis: IRedisClient; F ...
- UINavigationController 、UINavigationBar 、UINavigationItem 超清晰直观详解
UINavigationController 部分 1. UINavigationController 是一个容器类.里面盛放的是UIViewController. 容器的意思是,如果你不放入UIVi ...
- 架构:The Clean Architecture(整洁的架构)(转载)
地址:http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html. Over the last several ...
- 迷失第一季/全集Lost 1迅雷下载
迷失 第一季 Lost Season 1 (2004)本季看点:影片主要讲述一架客机坠落在太平洋的孤岛上,48名乘客侥幸生还.面对这种荒芜人烟的小岛,他们如何才能生存下去呢?生还者形形色色,国籍.人种 ...
- ubuntu php 安装
---apache2sudo apt-get install apache2 ---phpsudo apt-get install libapache2-mod-php5 php5 php5-gd p ...
- Orchard之生成新模板
一:启用 Code Generation 进入后台, Modules –> Developer Enable 之. 二:生成模版 首先,进入 Orchard 命令行 在 CMD 下到达解决 ...
- [转]PHP之APC缓存详细介绍(学习整理)
From : http://www.2cto.com/kf/201210/160140.html 1.APC缓存简介APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存 ...