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 ...
随机推荐
- 14_Python将列表作为栈和队列_Python编程之路
上一篇文章跟大家介绍了列表的一些方法,这一节我们还是讲列表 只是这一节我们要联系一些数据结构,来讲列表 栈 首先我们要理解一下栈是一种什么数据结构 栈(stack)又名堆栈,它是一种运算受限的线性表. ...
- @Transient 理解
transient使用小结 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问. 2)transient关键字只能修饰变量,而不能修饰方法和类.注意 ...
- JavaScript判断不同平台
function getPlatformType() { let UA = navigator.userAgent; if(/MicroMessenger/i.test(UA)){ return 'w ...
- Linux系统中安装Oracle过程记录
第一章 安装数据库软件 1.1 修改密码及创建目录和权限 创建oracle用户和组 创建相关目录并赋权 1.2 设置oracle用户环境变量 ORACLE_BASE:产品基目录 ORACLE_HOME ...
- js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法
对于js页面来说,未使用服务端控件,点击下载按钮时不会触发服务端事件,且不会提交数据到服务端页面后台进行数据处理,所以要下载文件比较困难.且使用jQ的post来请求一般处理程序也不能实现文件的下载,根 ...
- C++笔记003:从一个小程序开始
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 安装好VS2010后,从第一个小程序开始. 在学习C语言时,我首先输出了一个程序员非常熟悉的对这个世界的问候:hello world! ...
- 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
我的环境:虚拟机是:VMware-workstation-full-8.0.0-471780.exe:Linux系统用的是:CentOS-7-x86_64-Minimal-1503-01.ios;(阿 ...
- Go 语言常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量. 常量中的数据类型只可以是布尔型.数字型(整数型.浮点型和复数)和字符串型. 常量的定义格式: const identifier [type] ...
- TensorFlow实验环境搭建
初衷: 由于系统.平台的原因,网上有各种版本的tensorflow安装教程,基于linux的.mac的.windows的,各有不同,tensorflow的官网也给出了具体的安装命令.但实际上,即使te ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...