开发者社区> ghost丶桃子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

iOS中 百度地图详解

简介:
+关注继续查看

需要准备工作按照下图引进类库


需要添加


添加的两个字符串为:NSLocationWhenInUseUsageDescription  /  NSLocationAlwaysUsageDescription


默认定位设置:



设置工作准备完毕上代码:

指示根视图:

[objc] view plain copy
  1. [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:23/255.0 green:180/255.0 blue:237/255.0 alpha:1]];  
  2. self.window.rootViewController = [MapViewController new];  

MapViewController.m//设置需要的属性

[objc] view plain copy
  1. #import "MapViewController.h"  
  2. #import <MapKit/MapKit.h>  
  3. #import "Mypoint.h"  
  4. #import <CoreLocation/CoreLocation.h>  
  5. @interface MapViewController ()<MKMapViewDelegate,CLLocationManagerDelegate>  
  6. @property (nonatomicstrongMKMapView *mapView;  
  7. //经度  
  8. @property (nonatomicstrongUITextField *longitudetext;  
  9. //纬度  
  10. @property (nonatomicstrongUITextField *latitudeText;  
  11. //经度  
  12. @property (nonatomicstrongUILabel *longitudeLabel;  
  13. //纬度  
  14. @property (nonatomicstrongUILabel *latitudelabel;  
  15. //防止标注的button[  
  16. @property (nonatomicstrongUIButton *button;  
  17. //地址输入  
  18. @property (nonatomicstrongUITextField *destination;  
  19. //输入地址查询地图  
  20. @property (nonatomicretainUIButton *searchButton;  
  21. //可以获取设备当前的经纬度信息  
  22. @property (nonatomicstrongCLLocationManager *locManager;  
  23. @end  
  24.   
  25. @implementation MapViewController  


调用:
[objc] view plain copy
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     self.view.backgroundColor = [UIColor whiteColor];  
  4.     self.locManager = [[CLLocationManager alloc]init];  
  5.     //代理  
  6.     _locManager.delegate = self;  
  7.     //定位精度  
  8.     _locManager.desiredAccuracy = kCLLocationAccuracyBest;  
  9.     //定位频率,10米定位一次  
  10.     CLLocationDistance distance = 10.0;  
  11.     _locManager.distanceFilter = distance;  
  12.     //更新位置  
  13.     [_locManager requestAlwaysAuthorization];  
  14.     [self.locManager startUpdatingLocation];  
  15.     //查询两个地点之间的距离  
  16.     [self countDistance];  
  17.     //调用布置视图  
  18.     [self configureView];  
  19.     [self setMapView];  
  20. }  

//布置视图

[objc] view plain copy
  1. - (void)configureView{  
  2.     //经度  
  3.     self.longitudeLabel = [[UILabel alloc]initWithFrame:CGRectMake(0204030)];  
  4.     self.longitudeLabel.text = @"经度";  
  5.       
  6.     self.longitudetext = [[UITextField alloc]initWithFrame:CGRectMake(402012030)];  
  7.     self.longitudetext.borderStyle = UITextBorderStyleRoundedRect;  
  8.     //纬度  
  9.     self.latitudelabel = [[UILabel alloc]initWithFrame:CGRectMake(0504030)];  
  10.     self.latitudelabel.text = @"纬度";  
  11.       
  12.     self.latitudeText = [[UITextField alloc]initWithFrame:CGRectMake(405012030)];  
  13.     self.latitudeText.borderStyle = UITextBorderStyleRoundedRect;  
  14.     //放置标注按钮  
  15.     self.button = [UIButton buttonWithType:(UIButtonTypeSystem)];  
  16.     self.button.frame = CGRectMake(307310030);  
  17.     [self.button setTitle:@"放置标注" forState:(UIControlStateNormal)];  
  18.     [self.button addTarget:self action:@selector(annotationAction:) forControlEvents:(UIControlEventTouchUpInside)];  
  19.     //地址输入  
  20.     self.destination = [[UITextField alloc]initWithFrame:CGRectMake(2002610030)];  
  21.     self.destination.borderStyle = UITextBorderStyleRoundedRect;  
  22.     //查询按钮  
  23.     self.searchButton = [UIButton buttonWithType:(UIButtonTypeSystem)];  
  24.     self.searchButton.frame = CGRectMake(2004610030);  
  25.     [self.searchButton setTitle:@"查询" forState:(UIControlStateNormal)];  
  26.     [self.searchButton addTarget:self action:@selector(detailSearchAction:) forControlEvents:(UIControlEventTouchUpInside)];  
  27.       
  28.     [self.view addSubview:self.button];  
  29.     [self.view addSubview:self.latitudelabel];  
  30.     [self.view addSubview:self.longitudeLabel];  
  31.     [self.view addSubview:self.longitudetext];  
  32.     [self.view addSubview:self.latitudeText];  
  33.     [self.view addSubview:self.searchButton];  
  34.     [self.view addSubview:self.destination];  
  35. }  

[objc] view plain copy
  1. - (void)countDistance{  
  2.     CLLocation *loc1 = [[CLLocation alloc]initWithLatitude:34 longitude:113];  
  3.     CLLocation *loc2 = [[CLLocation alloc]initWithLatitude:35 longitude:113];  
  4.     CLLocationDistance distance = [loc1 distanceFromLocation:loc2];  
  5.     NSLog(@"(%@) 和 (%@)的距离为: %f", loc1, loc2, distance);  
  6. }  

#pragma mark - CLLocationManagerDelegate Methods

// 此方法会被频繁调用

[objc] view plain copy
  1. - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations  
  2. {  
  3. //    NSLog(@"didUpdateLocations---%lu", (unsigned long)locations.count);  
  4.     // 用来表示某个位置的地理信息, 比如经纬度, 海拔等等  
  5.     CLLocation *location = locations.lastObject;  
  6.     // location.coordinate.latitude  维度  
  7.     // location.coordinate.longitude 经度  
  8.     NSLog(@"经度 == %f, 维度 == %f", location.coordinate.longitude, location.coordinate.latitude);  
  9.     self.longitudetext.text = [NSString stringWithFormat:@"%f",location.coordinate.longitude];  
  10.     self.latitudeText.text = [NSString stringWithFormat:@"%f",location.coordinate.latitude];  
  11.     // 停止更新位置(不用定位服务时马上停止, 因为非常耗电)  
  12. //    [manager stopUpdatingLocation];  
  13. }  

//调出地图

[objc] view plain copy
  1. - (void)setMapView{  
  2.     //创建地图视图,初始化参数  
  3.     //MKMapTypeStandard 显示街道和道路  
  4.     //MKMapTypeSatellite 显示卫星  
  5.     //MKMapTypeHybrid 显示混合地图  
  6.     self.mapView = [[MKMapView alloc]initWithFrame:CGRectMake(0100320460)];  
  7.     [self.mapView setMapType:MKMapTypeStandard];  
  8.     //显示用户当前的坐标,打开地图有相应的提示  
  9.     self.mapView.showsUserLocation = YES;  
  10.     //设置地图代理  
  11.     self.mapView.delegate = self;  
  12.     [self.view addSubview:self.mapView];  
  13. }  

#pragma mark 根据输入的经纬度确定位置

//放置标注

[objc] view plain copy
  1. //放置标注  
  2. - (void)annotationAction:(UIButton *)sender{  
  3.     //创建CLLocation 设置经纬度  
  4.     CLLocationCoordinate2D location = CLLocationCoordinate2DMake([[self.latitudeText text]floatValue], [[self.longitudetext text]floatValue] );  
  5.     //创建标题  
  6.     NSString *title = [NSString stringWithFormat:@"%f,%f",location.latitude,location.longitude];  
  7.     Mypoint *myPoint = [[Mypoint alloc]initWithCoordinate:location andTitle:title];  
  8.     //添加标注  
  9.     [self.mapView addAnnotation:myPoint];  
  10.     //放大到标注的位置  
  11.     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 0.010.01);  
  12.     [self.mapView setRegion:region];  
  13.     [self showLocation];  
  14. }  

//根据输入的经纬度显示位置

[objc] view plain copy
  1. //根据输入的经纬度显示位置  
  2. - (void)showLocation{  
  3.     //创建CLLocation 设置经纬度  
  4.     CLLocationCoordinate2D location = CLLocationCoordinate2DMake([[self.latitudeText text]floatValue], [[self.longitudetext text]floatValue] );  
  5.     //放大到标注的位置  
  6.     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 0.010.01);  
  7.     [self.mapView setRegion:region animated:YES];  
  8. }  

#pragma mark 根据输入的地址搜寻位置

//根据地址输入搜索地图

[objc] view plain copy
  1. //根据地址输入搜索地图  
  2. - (void)detailSearchAction:(UIButton *)search{  
  3.     if (_destination.text == nil || [_destination.text length] == 0) {  
  4.         return;  
  5.     }  
  6.     CLGeocoder *geocode = [[CLGeocoder alloc]init];  
  7.     [geocode geocodeAddressString:_destination.text completionHandler:^(NSArray *placemarks, NSError *error) {  
  8.         if (error || placemarks.count == 0) {  
  9.             NSLog(@"地址不存在");  
  10.         }else{  
  11.             for (CLPlacemark *placemark in placemarks) {  
  12.                 NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@",placemark.name,placemark.locality,placemark.country,placemark.postalCode);  
  13.             }  
  14.             CLPlacemark *firstPlacemark = [placemarks firstObject];  
  15.             CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude;  
  16.             CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude;  
  17.             //显示经纬度  
  18.             self.latitudeText.text = [NSString stringWithFormat:@"%.2f",latitude];  
  19.             self.longitudetext.text = [NSString stringWithFormat:@"%.2f",longitude];  
  20.             [self showLocation];  
  21.             [self searchDetailLocationAction];  
  22.         }  
  23.     }];  
  24. }  


//根据地址搜寻位置

[objc] view plain copy
  1. //根据地址搜寻位置  
  2. - (void)searchDetailLocationAction{  
  3.     //创建CLLocation 设置经纬度  
  4.     CLLocationCoordinate2D location = CLLocationCoordinate2DMake([self.latitudeText.text floatValue], [self.longitudetext.text floatValue]);  
  5.     //创建标题  
  6.     NSString *title = [NSString stringWithFormat:@"%f,%f",[self.latitudeText.text floatValue], [self.longitudetext.text floatValue]];  
  7.     Mypoint *myPoint = [[Mypoint alloc]initWithCoordinate:location andTitle:title];  
  8.     //添加标注  
  9.     [self.mapView addAnnotation:myPoint];  
  10.     //放大到标注的位置  
  11.     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 0.010.01);  
  12.     [self.mapView setRegion:region];  
  13. }  

建一个类:

[objc] view plain copy
  1. //.h  
  2. #import <Foundation/Foundation.h>  
  3. #import <MapKit/MapKit.h>  
  4. @interface Mypoint : NSObject<MKAnnotation>  
  5. //实现MKAnnotion协议必须要定义这个属性  
  6. @property (nonatomic,readonly)CLLocationCoordinate2D coordinate;  
  7. //标题  
  8. @property (nonatomic,copy)NSString *title;  
  9.   
  10. //初始化方法  
  11. - (id)initWithCoordinate:(CLLocationCoordinate2D)c andTitle:(NSString *)t;  
  12.   
  13. @end  
[objc] view plain copy
  1. //.m  
  2. #import "Mypoint.h"  
  3.   
  4. @implementation Mypoint  
  5. //初始化方法  
  6. - (id)initWithCoordinate:(CLLocationCoordinate2D)c andTitle:(NSString *)t{  
  7.     if (self = [super init]) {  
  8.         _coordinate = c;  
  9.         _title = t;  
  10.     }  
  11.     return self;  
  12. }  
  13. @end  


最终效果:


关注博主微博每日更新技术:http://weibo.com/hanjunqiang


原文地址:http://blog.csdn.net/qq_31810357/article/details/49847813


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS原生地图开发指南再续——地图覆盖物的应用
iOS原生地图开发指南再续——地图覆盖物的应用
108 0
iOS原生地图开发指南(一)
iOS原生地图开发指南
196 0
iOS原生地图开发指南(二)
iOS原生地图开发指南
95 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
深入剖析 iOS 性能优化
立即下载
聚划算iOS平台动态化方案LuaView
立即下载
移动 App 性能监测实践(iOS篇)
立即下载