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
原创粉丝点击