标签:
LBS,即Location Based Services,基于位置服务,用于定位、导航等功能,比如地图应用、订外卖等的app就需要这个功能。
在这里我使用的是高德LBS开放平台,地址:http://lbs.amap.com/
进入网站,首先注册并认证为开发者,然后为你的每个APP申请一个key,其中安全码(Bundle Identifier)通过Xcode切换到General标签,查看Bundle Identifier。
使用第三方服务,我们可以使用自动配置,这里就要使用到Cocoapods。CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。
安装Cocoapods教程:
gem sources -l
gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
gem sources -l
sudo gem install cocoapods
创建Podfile:
cd /project
touch 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‘
然后到工程目录,输入命令pod install
然后通过打开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(20, CGRectGetHeight(_mapView.bounds)-80,40,40); _locationButton.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin; _locationButton.backgroundColor = [UIColor whiteColor]; _locationButton.layer.cornerRadius = 5; [_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 == 0) { 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(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))]; //设置地图的代理和两个附件的位置 _mapView.delegate = self; _mapView.compassOrigin = CGPointMake(_mapView.compassOrigin.x, 22); _mapView.scaleOrigin = CGPointMake(_mapView.scaleOrigin.x, 22); [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
标签:
原文地址:http://www.cnblogs.com/abelsu/p/4764373.html