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

需要添加

添加的两个字符串为: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

iOS中 百度地图详解 韩俊强的博文的更多相关文章

  1. iOS中 断点下载详解 韩俊强的博客

    布局如下: 基本拖拉属性: #import "ViewController.h" #import "AFNetworking.h" @interface Vie ...

  2. iOS中 扫描二维码/生成二维码详解 韩俊强的博客

    最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  3. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...

  4. iOS中 最新支付宝支付(AliPay) 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 现在的支付方式一般有三种, 支付宝, 微信, 网银. 个人觉得最简单易用的还是支付宝, 微信虽然看起来币支付宝要简单 ...

  5. iOS中 本地通知/本地通知详解 韩俊强的博客

    布局如下:(重点讲本地通知) iOS开发者交流QQ群: 446310206 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 Notification是智能手机应用编 ...

  6. iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...

  7. iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret, ...

  8. iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/5111 ...

  9. iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 整体布局如下:     程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang  ...

随机推荐

  1. React 关于组件(界面)更新

    在最近在学 React , 将组件的UI更新稍微整理了一下.根据业务要求,可能会出现如下的技术实现要求:1.更新自己2.更新子组件3.更新兄弟组件4.更新父组件5.父 call 子  function ...

  2. JSTL标签四种判断语句的用法

    一.条件运算符 ${user.gender==1?'男':'女'} 二.if() <c:if test="${2>1}">code..</c:if> ...

  3. git报错:'fatal:remote origin already exists

    git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明.   git添加远程库的时候有可能出现如下的错误, 怎么解决? 只要两步: 1 ...

  4. 【python进阶】Garbage collection垃圾回收1

    前言 GC垃圾回收在python中是很重要的一部分,同样我将分两次去讲解Garbage collection垃圾回收,此篇为Garbage collection垃圾回收第一篇,下面开始今天的说明~~~ ...

  5. docker管理工具

    Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swarm集群和服 ...

  6. Windows环境下,从零开始搭建Nodejs+Express+Ejs框架(一)---安装nodejs

    第一步,安装nodejs https://nodejs.org/en/download/ 这个是nodejs的官网,由于操作系统是win7 64位的,所以,我下载的是node-v8.11.1-x64的 ...

  7. ucsc 文件格式说明

    链接附带的是ucsc各种格式文件的说明,以后遇到新类型的文件可以先来这里看看! https://www.genome.ucsc.edu/FAQ/FAQformat.html

  8. HashMap 和 HashTable 区别

    来源:http://www.importnew.com/7010.html HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚 ...

  9. Django 缓存模块 page_cache 源码阅读

    Django cache中比较常用的有 cache_page 这么个 decorators, 下面就根据请求流程,结合源码来说说它是怎么工作的? 版本是django1.8,不同版本可能函数等会变化,逻 ...

  10. Java程序员的Golang入门指南(下)

    Java程序员的Golang入门指南(下) 4.高级特性 上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号.函数多返回值.switch-case默认break.函数闭包.集合 ...