版权声明:本文为博主原创文章,未经博主允许不得转载。
需要准备工作按照下图引进类库
需要添加
添加的两个字符串为:NSLocationWhenInUseUsageDescription / NSLocationAlwaysUsageDescription
默认定位设置:
设置工作准备完毕上代码:
指示根视图:
[objc] view plain copy
- [[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//设置需要的属性
[objc] view plain copy
- #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
调用:
[objc] view plain copy
- - (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];
- }
//布置视图
[objc] view plain copy
- - (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];
- }
[objc] view plain copy
- - (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
// 此方法会被频繁调用
[objc] view plain copy
- - (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];
- }
//调出地图
[objc] view plain copy
- - (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 根据输入的经纬度确定位置
//放置标注
[objc] view plain copy
- //放置标注
- - (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];
- }
//根据输入的经纬度显示位置
[objc] view plain copy
- //根据输入的经纬度显示位置
- - (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 根据输入的地址搜寻位置
//根据地址输入搜索地图
[objc] view plain copy
- //根据地址输入搜索地图
- - (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];
- }
- }];
- }
//根据地址搜寻位置
[objc] view plain copy
- //根据地址搜寻位置
- - (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];
- }
建一个类:
[objc] view plain copy
- //.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
[objc] view plain copy
- //.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
原文地址:http://blog.csdn.net/qq_31810357/article/details/49847813
时间: 2024-12-01 10:55:11