iOS中 百度地图详解 韩俊强的博文
来源:互联网 发布:淘宝宝贝过期不存在 编辑:程序博客网 时间:2024/06/02 04:24
需要准备工作按照下图引进类库
需要添加
添加的两个字符串为:NSLocationWhenInUseUsageDescription / NSLocationAlwaysUsageDescription
默认定位设置:
设置工作准备完毕上代码:
指示根视图:
[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:23/255.0 green:180/255.0 blue:237/255.0 alpha:1]]; self.window.rootViewController = [MapViewController new];
MapViewController.m//设置需要的属性
#import "MapViewController.h"#import <MapKit/MapKit.h>#import "Mypoint.h"#import <CoreLocation/CoreLocation.h>@interface MapViewController ()<MKMapViewDelegate,CLLocationManagerDelegate>@property (nonatomic, strong) MKMapView *mapView;//经度@property (nonatomic, strong) UITextField *longitudetext;//纬度@property (nonatomic, strong) UITextField *latitudeText;//经度@property (nonatomic, strong) UILabel *longitudeLabel;//纬度@property (nonatomic, strong) UILabel *latitudelabel;//防止标注的button[@property (nonatomic, strong) UIButton *button;//地址输入@property (nonatomic, strong) UITextField *destination;//输入地址查询地图@property (nonatomic, retain) UIButton *searchButton;//可以获取设备当前的经纬度信息@property (nonatomic, strong) CLLocationManager *locManager;@end@implementation MapViewController
- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; self.locManager = [[CLLocationManager alloc]init]; //代理 _locManager.delegate = self; //定位精度 _locManager.desiredAccuracy = kCLLocationAccuracyBest; //定位频率,10米定位一次 CLLocationDistance distance = 10.0; _locManager.distanceFilter = distance; //更新位置 [_locManager requestAlwaysAuthorization]; [self.locManager startUpdatingLocation]; //查询两个地点之间的距离 [self countDistance]; //调用布置视图 [self configureView]; [self setMapView];}
//布置视图
- (void)configureView{ //经度 self.longitudeLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 20, 40, 30)]; self.longitudeLabel.text = @"经度"; self.longitudetext = [[UITextField alloc]initWithFrame:CGRectMake(40, 20, 120, 30)]; self.longitudetext.borderStyle = UITextBorderStyleRoundedRect; //纬度 self.latitudelabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 50, 40, 30)]; self.latitudelabel.text = @"纬度"; self.latitudeText = [[UITextField alloc]initWithFrame:CGRectMake(40, 50, 120, 30)]; self.latitudeText.borderStyle = UITextBorderStyleRoundedRect; //放置标注按钮 self.button = [UIButton buttonWithType:(UIButtonTypeSystem)]; self.button.frame = CGRectMake(30, 73, 100, 30); [self.button setTitle:@"放置标注" forState:(UIControlStateNormal)]; [self.button addTarget:self action:@selector(annotationAction:) forControlEvents:(UIControlEventTouchUpInside)]; //地址输入 self.destination = [[UITextField alloc]initWithFrame:CGRectMake(200, 26, 100, 30)]; self.destination.borderStyle = UITextBorderStyleRoundedRect; //查询按钮 self.searchButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; self.searchButton.frame = CGRectMake(200, 46, 100, 30); [self.searchButton setTitle:@"查询" forState:(UIControlStateNormal)]; [self.searchButton addTarget:self action:@selector(detailSearchAction:) forControlEvents:(UIControlEventTouchUpInside)]; [self.view addSubview:self.button]; [self.view addSubview:self.latitudelabel]; [self.view addSubview:self.longitudeLabel]; [self.view addSubview:self.longitudetext]; [self.view addSubview:self.latitudeText]; [self.view addSubview:self.searchButton]; [self.view addSubview:self.destination];}
- (void)countDistance{ CLLocation *loc1 = [[CLLocation alloc]initWithLatitude:34 longitude:113]; CLLocation *loc2 = [[CLLocation alloc]initWithLatitude:35 longitude:113]; CLLocationDistance distance = [loc1 distanceFromLocation:loc2]; NSLog(@"(%@) 和 (%@)的距离为: %f", loc1, loc2, distance);}
#pragma mark - CLLocationManagerDelegate Methods
// 此方法会被频繁调用
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{// NSLog(@"didUpdateLocations---%lu", (unsigned long)locations.count); // 用来表示某个位置的地理信息, 比如经纬度, 海拔等等 CLLocation *location = locations.lastObject; // location.coordinate.latitude 维度 // location.coordinate.longitude 经度 NSLog(@"经度 == %f, 维度 == %f", location.coordinate.longitude, location.coordinate.latitude); self.longitudetext.text = [NSString stringWithFormat:@"%f",location.coordinate.longitude]; self.latitudeText.text = [NSString stringWithFormat:@"%f",location.coordinate.latitude]; // 停止更新位置(不用定位服务时马上停止, 因为非常耗电)// [manager stopUpdatingLocation];}
//调出地图
- (void)setMapView{ //创建地图视图,初始化参数 //MKMapTypeStandard 显示街道和道路 //MKMapTypeSatellite 显示卫星 //MKMapTypeHybrid 显示混合地图 self.mapView = [[MKMapView alloc]initWithFrame:CGRectMake(0, 100, 320, 460)]; [self.mapView setMapType:MKMapTypeStandard]; //显示用户当前的坐标,打开地图有相应的提示 self.mapView.showsUserLocation = YES; //设置地图代理 self.mapView.delegate = self; [self.view addSubview:self.mapView];}
#pragma mark 根据输入的经纬度确定位置
//放置标注
//放置标注- (void)annotationAction:(UIButton *)sender{ //创建CLLocation 设置经纬度 CLLocationCoordinate2D location = CLLocationCoordinate2DMake([[self.latitudeText text]floatValue], [[self.longitudetext text]floatValue] ); //创建标题 NSString *title = [NSString stringWithFormat:@"%f,%f",location.latitude,location.longitude]; Mypoint *myPoint = [[Mypoint alloc]initWithCoordinate:location andTitle:title]; //添加标注 [self.mapView addAnnotation:myPoint]; //放大到标注的位置 MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 0.01, 0.01); [self.mapView setRegion:region]; [self showLocation];}
//根据输入的经纬度显示位置
//根据输入的经纬度显示位置- (void)showLocation{ //创建CLLocation 设置经纬度 CLLocationCoordinate2D location = CLLocationCoordinate2DMake([[self.latitudeText text]floatValue], [[self.longitudetext text]floatValue] ); //放大到标注的位置 MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 0.01, 0.01); [self.mapView setRegion:region animated:YES];}
#pragma mark 根据输入的地址搜寻位置
//根据地址输入搜索地图
//根据地址输入搜索地图- (void)detailSearchAction:(UIButton *)search{ if (_destination.text == nil || [_destination.text length] == 0) { return; } CLGeocoder *geocode = [[CLGeocoder alloc]init]; [geocode geocodeAddressString:_destination.text completionHandler:^(NSArray *placemarks, NSError *error) { if (error || placemarks.count == 0) { NSLog(@"地址不存在"); }else{ for (CLPlacemark *placemark in placemarks) { NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@",placemark.name,placemark.locality,placemark.country,placemark.postalCode); } CLPlacemark *firstPlacemark = [placemarks firstObject]; CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude; CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude; //显示经纬度 self.latitudeText.text = [NSString stringWithFormat:@"%.2f",latitude]; self.longitudetext.text = [NSString stringWithFormat:@"%.2f",longitude]; [self showLocation]; [self searchDetailLocationAction]; } }];}
//根据地址搜寻位置
//根据地址搜寻位置- (void)searchDetailLocationAction{ //创建CLLocation 设置经纬度 CLLocationCoordinate2D location = CLLocationCoordinate2DMake([self.latitudeText.text floatValue], [self.longitudetext.text floatValue]); //创建标题 NSString *title = [NSString stringWithFormat:@"%f,%f",[self.latitudeText.text floatValue], [self.longitudetext.text floatValue]]; Mypoint *myPoint = [[Mypoint alloc]initWithCoordinate:location andTitle:title]; //添加标注 [self.mapView addAnnotation:myPoint]; //放大到标注的位置 MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 0.01, 0.01); [self.mapView setRegion:region];}
建一个类:
//.h#import <Foundation/Foundation.h>#import <MapKit/MapKit.h>@interface Mypoint : NSObject<MKAnnotation>//实现MKAnnotion协议必须要定义这个属性@property (nonatomic,readonly)CLLocationCoordinate2D coordinate;//标题@property (nonatomic,copy)NSString *title;//初始化方法- (id)initWithCoordinate:(CLLocationCoordinate2D)c andTitle:(NSString *)t;@end
//.m#import "Mypoint.h"@implementation Mypoint//初始化方法- (id)initWithCoordinate:(CLLocationCoordinate2D)c andTitle:(NSString *)t{ if (self = [super init]) { _coordinate = c; _title = t; } return self;}@end
关注博主微博每日更新技术:http://weibo.com/hanjunqiang
1 0
- iOS中 百度地图详解 韩俊强的博文
- iOS中百度地图API的总结
- iOS中百度地图API的总结
- iOS中百度地图API的总结
- iOS中百度地图API的总结
- iOS中百度地图API的总结
- iOS中百度地图API的总结
- iOS中百度地图API的总结
- ios 百度地图 使用详解
- ios 百度地图 使用详解
- ios 百度地图 使用详解
- iOS 百度地图使用详解
- ios 百度地图 使用详解
- iOS百度地图SDK详解
- iOS 百度地图使用详解
- iOS 百度地图使用详解
- ios项目中调用百度地图iphone版与百度地图HDipad版的坑
- iOS 百度地图的坑
- 怎么在win10系统下安装ubuntu双系统
- 在struts2框架做上传功能
- Android手机获取屏幕分辨率(屏幕高度和宽度)
- linux命令之eval
- Swift(二十、扩展)
- iOS中 百度地图详解 韩俊强的博文
- ECMAScript 定义类或对象
- xshell 登陆 ubuntu
- 学习
- 简单的ACE反应器(Reactor)模式服务器
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十四节:Shell编程入门(六)
- 前序 中序 后序遍历的递归和非递归实现
- 【笨木头Unity】入门之旅008:Demo之四处找死(三)_触发器
- 5.6.1 局部空间和世界空间