基于LBS平台的iOS开发
LBS,即Location Based Services,基于位置服务,用于定位、导航等功能,比如地图应用、订外卖等的app就需要这个功能。
在这里我使用的是高德LBS开放平台,地址:http://lbs.amap.com/
进入网站,首先注册并认证为开发者,然后为你的每个APP申请一个key,其中安全码(Bundle Identifier)通过Xcode切换到General标签,查看Bundle Identifier。
使用第三方服务,我们可以使用自动配置,这里就要使用到Cocoapods。CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。
如果需要升级ruby,使用homebrew安装:brew install ruby
另外一种方法升级ruby: sudo gem update --system
安装Cocoapods教程:
gem sources -l
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
sudo gem install -n /usr/local/bin cocoapods
pod setup
创建Podfile:
cd /project
touch Podfile
或者直接cd到工程目录,然后pod init ,在Podfile里直接添加也行。
编辑Podfile文件:
source 'https://github.com/CocoaPods/Specs.git'
platform:ios,'7.0' #手机系统
#pod 'AMap3DMap' #3D地图SDK
pod 'AMap2DMap' #2D地图SDK(2D和3D不能同时使用)
pod 'AMapSearch' #搜索服务SDK 以下是额外补充
#platform :ios
#pod 'Reachability', '~> 3.0.0'
#pod 'SBJson', '~> 4.0.0' #platform :ios, '7.0'
#pod 'AFNetworking', '~> 2.0'
标准格式:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target 'AlamofireDemo' do
pod 'Alamofire'
pod 'SwiftyJSON'
end
然后到工程目录,输入命令pod install,如果出现-bash: pod: command not found,输入sudo gem install -n /usr/local/bin cocoapods即可解决。
如果如果pod update / pod install 卡在:Updating local specs repositories,
等待即可,或者可以使用 “pod install --verbose --no-repo-update” 进行下载。
更新:如果你又添加新的三方库,可以在Podfile文件中继续添加,然后再终端输入pod update,然后CocoaPods就会重新帮你导入.
然后通过打开xcworkspace文件打开安装有cocoapods的工程
以下是我Controller.m的核心代码,仅供参考:
#import "ViewController.h"
#import <MAMapKit/MAMapKit.h>
#import <AMapSearchKit/AMapSearchAPI.h>
#define APIKey @"你申请的key" @interface ViewController ()<MAMapViewDelegate,AMapSearchDelegate>
{
MAMapView *_mapView;
AMapSearchAPI *_search;
CLLocation *_currentLocation;
UIButton *_locationButton;
} @end @implementation ViewController - (void)initControls
{
_locationButton = [UIButton buttonWithType:UIButtonTypeCustom];
_locationButton.frame = CGRectMake(, CGRectGetHeight(_mapView.bounds)-,,);
_locationButton.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
_locationButton.backgroundColor = [UIColor whiteColor];
_locationButton.layer.cornerRadius = ;
[_locationButton addTarget:self action:@selector(locateAction) forControlEvents:UIControlEventTouchUpInside];
[_locationButton setImage:[UIImage imageNamed:@"location_no"] forState:UIControlStateNormal];
[_mapView addSubview:_locationButton]; }
//搜索服务
- (void)initSearch
{
_search = [[AMapSearchAPI alloc]initWithSearchKey:APIKey Delegate:self];
} //修改用户定位模式
- (void)locateAction
{
if (_mapView.userTrackingMode != MAUserTrackingModeFollow) {
[_mapView setUserTrackingMode:MAUserTrackingModeFollow animated:YES];
}
}
//地理编码搜索请求
- (void)reGeoAction
{
if(_currentLocation)
{
AMapReGeocodeSearchRequest *request = [[AMapReGeocodeSearchRequest alloc]init];
request.location = [AMapGeoPoint locationWithLatitude:_currentLocation.coordinate.latitude longitude:_currentLocation.coordinate.longitude];
[_search AMapGeocodeSearch:request];
}
} - (void)searchRequest:(id)request didFailWithError:(NSError *)error
{
NSLog(@"request :%@, error :%@",request,error);
}
- (void)onReGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response
{
NSLog(@"response :%@",response);
NSString *title = response.regeocode.addressComponent.city;
if (title.length == ) {
title = response.regeocode.addressComponent.province;
}
_mapView.userLocation.title = title;
_mapView.userLocation.subtitle = response.regeocode.formattedAddress;
} //用户代理方法
- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated
{
//修改定位按钮状态
if(mode == MAUserTrackingModeNone)
{
[_locationButton setImage:[UIImage imageNamed:@"location_no"] forState:UIControlStateNormal];
}
else{
[_locationButton setImage:[UIImage imageNamed:@"location_yes"] forState:UIControlStateNormal];
}
} //记录当前所在位置
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation
{
NSLog(@"userLocation: %@",userLocation.location);
_currentLocation = [userLocation.location copy]; } - (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view
{
//选中定位annotation的时候进行逆地理编码查询
if ([view.annotation isKindOfClass:[MAUserLocation class]])
{
[self reGeoAction];
}
} //初始化地图
- (void)initMapView
{
[MAMapServices sharedServices].apiKey = APIKey;
_mapView = [[MAMapView alloc]initWithFrame:CGRectMake(, , CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
//设置地图的代理和两个附件的位置
_mapView.delegate = self;
_mapView.compassOrigin = CGPointMake(_mapView.compassOrigin.x, );
_mapView.scaleOrigin = CGPointMake(_mapView.scaleOrigin.x, );
[self.view addSubview:_mapView];
//打开用户定位
_mapView.showsUserLocation = YES; } - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self initMapView];
[self initSearch];
[self initControls];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
运行结果:

如果你有更多的API接口想要实现,你可以去高德LBS开放平台去看看开发文档,可以作进一步深入和开发。
github地址:https://github.com/AbelSu131/HelloAmap
基于LBS平台的iOS开发的更多相关文章
- 基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载
koahub-loader koahub-loader是基于 Koa平台Node.js开发的KoaHub.js的koahub-loader控制器,模型,帮助方法自动加载 koahub loader I ...
- 基于 Koa平台Node.js开发的KoaHub.js连接打印机的代码
最近好多小伙伴都在做微信商城的项目,那就给大家分享一个基于 Koa.js 平台的 Node.js web 开发的框架连接微信易联云打印机接口的代码,供大家学习.koahub-yilianyun 微信易 ...
- 基于 Koa平台Node.js开发的KoaHub.js获取/设置会话功能代码
koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...
- 基于 Koa平台Node.js开发的KoaHub.js的静态服务器重写和索引代码
koa-static-server Static file serving middleware for koa with directory, rewrite and index support k ...
- 基于 Koa平台Node.js开发的KoaHub.js的模板引擎代码
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- 基于 Koa平台Node.js开发的KoaHub.js的输出json到页面代码
koahub-body-res koahub body res Format koa's respond json. Installation $ npm install koahub-body-re ...
- 基于 Koa平台Node.js开发的KoaHub.js的跳过组件代码
koahub-skip koahub skip middleware koahub skip Conditionally skip a middleware when a condition is m ...
- iOS开发---集成百度地图完善版
一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...
- 《iOS开发指南》正式出版-源码-样章-目录,欢迎大家提出宝贵意见
智捷iOS课堂-关东升老师最新作品:<iOS开发指南-从0基础到AppStore上线>正式出版了 iOS架构设计.iOS性能优化.iOS测试驱动.iOS调试.iOS团队协作版本控制.... ...
随机推荐
- LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)
题意 题目链接 Sol 考虑不合法的情况只有两种: 进去了 再次进去 没进去 但是出来了 显然可以用未知记录抵消掉 直接开个set维护一下所有未知记录的位置 最优策略一定是最后一次操作位置的后继 同时 ...
- 葡萄城报表 SP2 新特性(1)— 单元格智能合并
中国式复杂报表的布局,因为数据的动态性和结构性,导致其布局往往是无规律,且在设计时无法预测的,如单元格合并,通常不仅希望在每一列的数据展现中,能够根据需要自动将相同的单元格合并,且每个单元格之间该属性 ...
- RecyclerView-- 侧滑删除和拖动排序
实现这么个功能我们不需要再去继承RecyclerView,只需要去了解ItemTouchHelper这个类即可,接下来我们就去看看都有些什么 ItemTouchHelper.Callback 默认需要 ...
- Fiddler抓包使用教程-扫盲篇
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72823370 本文出自[赵彦军的博客] 1.什么是抓包? 不同主机之间的数据通信都 ...
- NETBEAN 启动报错 CANNOT LOCATE JAVA INSTALLATION IN SPECIFIED JDKHOME的解决办法
打开 NetBeans 安装目录下的\etc目录,查找报错信息中的jdk字符串,修改netbeans.conf文件即可
- 团队项目个人进展——Day09
一.昨天工作总结 冲刺第九天,把地图和界面整合了一下 二.遇到的问题 地图的样式和一些公共样式有冲突 三.今日工作规划 团队共同整合程序,做出第一阶段的成品.
- 常用内置方法之:__str__,__repr__
class Test(object): def __init__(self): pass def __str__(self): return "test" test = Test( ...
- 树莓派Pi2 使用入门
1. 材料和环境 树莓派Pi2, microSD卡(大于等于4G), 网线 官网下载: 系统镜像 Raspbian Jessie (https://downloads.raspberrypi.org/ ...
- Innodb的体系结构
MySQL的体系结构,两部分组成:MySQL的server层和存储引擎层. 存储引擎层innodb体系结构: innodb的整个体系结构就是由多个内存块组成的缓冲池及多个后台进程组成.我们可以从三方面 ...
- 拉格朗日插值和牛顿插值 matlab
1. 已知函数在下列各点的值为 0.2 0.4 0.6 0.8 1.0 0.98 0.92 0.81 0.64 0.38 用插值法对数据进行拟合,要求给出Lagrange插值多项式和Newto ...