iOS中 百度地图详解 韩俊强的博文
需要准备工作按照下图引进类库
需要添加
添加的两个字符串为: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中 百度地图详解 韩俊强的博文的更多相关文章
- iOS中 断点下载详解 韩俊强的博客
布局如下: 基本拖拉属性: #import "ViewController.h" #import "AFNetworking.h" @interface Vie ...
- iOS中 扫描二维码/生成二维码详解 韩俊强的博客
最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...
- iOS中 最新支付宝支付(AliPay) 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 现在的支付方式一般有三种, 支付宝, 微信, 网银. 个人觉得最简单易用的还是支付宝, 微信虽然看起来币支付宝要简单 ...
- iOS中 本地通知/本地通知详解 韩俊强的博客
布局如下:(重点讲本地通知) iOS开发者交流QQ群: 446310206 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 Notification是智能手机应用编 ...
- iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret, ...
- iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/5111 ...
- iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 整体布局如下: 程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang ...
随机推荐
- idea+jsp+jstl c标签页面异常
先在Schema and DTDs配置C.tld文件 最后提示是少包 网上很多方法都说少jstl.jar 折腾了很久 其实还少standard.jar 以前的解决方法(看下面) 把这两个包分别加到项目 ...
- 传统方法过渡到ES6去优雅地实现JavaScript的继承
众所周知,面向对象编程有三个重要的概念: 封装.继承.多态.而JS作为面向对象的弱类型语言,应该说是基于对象的语言,正如常说的,JS的世界里,万物皆对象.虽然JS本身不是面向对象的语言,我们可以通过模 ...
- 利用mybatis-generator自动生成数据持久化的代码
MyBatis生成器简介 MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iB ...
- Java 并发编程——Executor框架和线程池原理
Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务 ...
- C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形界面 ...
- 函数&语法
定义一个函数 加上一些算法,由自己定义的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参 ...
- PHP 实例 - AJAX 实时搜索
AJAX Live Search 在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结果. 实时的搜索与传统的搜索相比,具有很多优势: 当键入数据时,就会显示出匹配的结果 当继续 ...
- 利用github webhook 结合openresty自动更新静态博客
使用hexo在github pages上弄了一个静态博客,后来觉得访问有点慢,于是放到自己vps上. 对于静态博客的部署非常简单,本来就是html,js,css等静态文件,只要nginx上配置下目录就 ...
- Spark-SQL之DataFrame操作大全
Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFra ...
- Linux下创建软链接
创建软链接: ln -s /newdisk/app-tpl/apache-tomcat-7.0.47/webapps/app-tpl-webapp/ /newdisk/UCMSServer/tomca ...