- 浏览: 532636 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangyunliang:
大哥你太历害了谢谢
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
u013015029:
LZ,请问下,在// 添加消息到聊天窗口 , 这里获取Ed ...
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
endual:
怎么保持会话,我搞不懂啊
Android基于XMPP Smack Openfire开发IM【一】登录openfire服务器 -
donala_zq:
显示:[2013-11-30 11:50:36 - Andro ...
android-----------新浪微博 -
donala_zq:
哥,运行不了啊
android-----------新浪微博
[img][/img]今天写的是一个简单功能的google地图小demo,因为模拟器定位的经纬度已经默认设置为了苹果公司地址,所以只能定位一个地方了。
在模拟器里有个位置坐标的设定。调试-位置-自定义。可以通过修改坐标值进行进一步测试
实现效果
[img]
[/img]
[img]
[/img]
[img]
[/img]
[img]
[/img]
实现地图定位我们需要两个类
CLLocationManager 和CLLocation
1.首先需要一个位置管理器,CLLocationManager对象locationManager,CLLocationManager *locationManager;
设置委托 locationManager.delegate = self;
2.设置精度 locationManager.desiredAccuracy = kCLLocationAccuracyBest;
desiredAccuracy类型double,因此我们可以指定他的精度为一个确却数据比如10,但是事件不能计算那么准确,或者由于其他原因都达不到我们所设置进度,因此我们指定为kCLLocationAccuracyBest表示级别最高精度,还有其他精度
kCLLocationAccuracyBestForNavigation 最高精度,这种级别用于导航程序
kCLLocationAccuracyBest 最高精度
kCLLocationAccuracyHundredMeters 精度为100米内
kCLLocationAccuracyKilometer 精度到公里范围内
kCLLocationAccuracyNearestTenMeters 精度到10米内
kCLLocationAccuracyThreeKilometers 精度到3公里范围内
3.设置距离筛选器 locationManager.distanceFilter = 100;
距离筛选器,作用是当你移动一段位移后,所以移动距离大于筛选器说设置100m时候,通知委托更新位置;
但是位置一段更新过于频繁就会消耗电池电量,我们可以返回它的默认的没有筛选器模式,使用常量kCLDistanceFilterNone;
locationManager.distanceFilterkCLDistanceFilterNone
4.然后就是启动 位置管理器进行定位[locationManager startUpdatingLocation]; 如果我们不需要继续轮询更新位置可以使用[locationManager stopUpdatingLocation];停止更新,否则应用程序打开会一直更新,这些都需要添加委托的,遵循
CLLocationManagerDelegate协议
5.为了显示确实却是进行了定位,我们获取定位的经纬度,显示到label上,然后就是用到了CLLocation类,他有五个属性
latitude经度 longitude纬度 horizontalAccuracy水平精度(map中显示的蓝色圆半径都是以它为半径的) altitude海拔高度
verticalAccuracy 竖直高度(为负值得时候表示无法确定高度)
6.显示定位的实况地图
需要设置显示区域和显示比例,他们是两个结构体,MKCoordinateSpan ,MKCoordinateRegion
MKCoordinateRegion定义
typedef struct{
CLLocationCoordinate2D center;//表示显示的中心
MKCoordinateSpan span; //表示比例
}MKCoordinateRegion;
MKCoordinateSpan定义:
typedef struct{
CLLocationDegrees latitudeDelta;//这类型在前一节中讲过了,是double型的
CLLocationDegrees longitudeDlta;
}MKCoordinateSpan;
7.通过 region.center = newLocation.coordinate;获取定位的经纬度,然后显示到MKMapView,通过
UISegmentedControl设计了一个按钮集合来切换三种不同地图
首先我们要在工程添加支持定位和显示地图的库
CoreLocation.framework 和 MapKit.framework 添加两个头文件,对应代码
通过按钮跳转视图,显示地图
切换google三种地图显示
在模拟器里有个位置坐标的设定。调试-位置-自定义。可以通过修改坐标值进行进一步测试
实现效果
[img]
[/img]
[img]
[/img]
[img]
[/img]
[img]
[/img]
实现地图定位我们需要两个类
CLLocationManager 和CLLocation
1.首先需要一个位置管理器,CLLocationManager对象locationManager,CLLocationManager *locationManager;
设置委托 locationManager.delegate = self;
2.设置精度 locationManager.desiredAccuracy = kCLLocationAccuracyBest;
desiredAccuracy类型double,因此我们可以指定他的精度为一个确却数据比如10,但是事件不能计算那么准确,或者由于其他原因都达不到我们所设置进度,因此我们指定为kCLLocationAccuracyBest表示级别最高精度,还有其他精度
kCLLocationAccuracyBestForNavigation 最高精度,这种级别用于导航程序
kCLLocationAccuracyBest 最高精度
kCLLocationAccuracyHundredMeters 精度为100米内
kCLLocationAccuracyKilometer 精度到公里范围内
kCLLocationAccuracyNearestTenMeters 精度到10米内
kCLLocationAccuracyThreeKilometers 精度到3公里范围内
3.设置距离筛选器 locationManager.distanceFilter = 100;
距离筛选器,作用是当你移动一段位移后,所以移动距离大于筛选器说设置100m时候,通知委托更新位置;
但是位置一段更新过于频繁就会消耗电池电量,我们可以返回它的默认的没有筛选器模式,使用常量kCLDistanceFilterNone;
locationManager.distanceFilterkCLDistanceFilterNone
4.然后就是启动 位置管理器进行定位[locationManager startUpdatingLocation]; 如果我们不需要继续轮询更新位置可以使用[locationManager stopUpdatingLocation];停止更新,否则应用程序打开会一直更新,这些都需要添加委托的,遵循
CLLocationManagerDelegate协议
5.为了显示确实却是进行了定位,我们获取定位的经纬度,显示到label上,然后就是用到了CLLocation类,他有五个属性
latitude经度 longitude纬度 horizontalAccuracy水平精度(map中显示的蓝色圆半径都是以它为半径的) altitude海拔高度
verticalAccuracy 竖直高度(为负值得时候表示无法确定高度)
6.显示定位的实况地图
需要设置显示区域和显示比例,他们是两个结构体,MKCoordinateSpan ,MKCoordinateRegion
MKCoordinateRegion定义
typedef struct{
CLLocationCoordinate2D center;//表示显示的中心
MKCoordinateSpan span; //表示比例
}MKCoordinateRegion;
MKCoordinateSpan定义:
typedef struct{
CLLocationDegrees latitudeDelta;//这类型在前一节中讲过了,是double型的
CLLocationDegrees longitudeDlta;
}MKCoordinateSpan;
7.通过 region.center = newLocation.coordinate;获取定位的经纬度,然后显示到MKMapView,通过
UISegmentedControl设计了一个按钮集合来切换三种不同地图
首先我们要在工程添加支持定位和显示地图的库
CoreLocation.framework 和 MapKit.framework 添加两个头文件,对应代码
#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> @interface LocationViewController : UIViewController<CLLocationManagerDelegate> @property (strong,nonatomic) CLLocationManager *locationManager; @property (strong,nonatomic) CLLocation *startPoint; @property (strong, nonatomic) IBOutlet UILabel *latitudeLabel; @property (strong, nonatomic) IBOutlet UILabel *longitudeLabel; @property (strong, nonatomic) IBOutlet UILabel *horizontalAccuracyLabel; @property (strong, nonatomic) IBOutlet UILabel *altitudeLabel; @property (strong, nonatomic) IBOutlet UILabel *verticalAccuracyLabel; @property (strong, nonatomic) IBOutlet UILabel *distanceTraveledLabel; @property (strong, nonatomic) MKMapView *mapView; @property (strong, nonatomic) UISegmentedControl *mapSegmentedControl; - (IBAction)mapViewSwitcher:(id)sender; -(void) selectedMapType:(id)sender; @end
- (void)viewDidLoad { [super viewDidLoad]; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; // 设置位置精度 locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 距离过滤,表示在地图上每隔100更新一次定位 locationManager.distanceFilter = 100; // 启动位置管理器,进行定位服务 [locationManager startUpdatingLocation]; // 设置mapSegmentedControl按钮样式和显示按钮显示文字 NSArray *mapItems = [[NSArray alloc] initWithObjects:@"街道地图",@"卫星地图",@"混合地图", nil]; mapSegmentedControl = [[UISegmentedControl alloc] initWithItems:mapItems]; mapSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; mapSegmentedControl.frame = CGRectMake(0, 430, 180, 30); // 根据索引值,表示mapSegmentedControl默认响应哪个 mapSegmentedControl.selectedSegmentIndex = 0; // 给mapSegmentedContol添加响应方法 [mapSegmentedControl addTarget:self action:@selector(selectedMapType:) forControlEvents:UIControlEventValueChanged]; }
#pragma mark - #pragma mark CLLocationManagerDelegate Methods //获取位置信息 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { if (startPoint == nil) { startPoint=newLocation; } // %g表示浮点数 \u00B0表示是转换字符,度的表示 // 显示经度,将经度信息显示到Label上 latitudeLabel.text = [NSString stringWithFormat:@"%g\u00B0",newLocation.coordinate.latitude]; //显示纬度 longitudeLabel.text = [NSString stringWithFormat:@"%g\u00B0",newLocation.coordinate.longitude]; // 水平经度,也就是显示经纬度的经度 horizontalAccuracyLabel.text = [NSString stringWithFormat:@"%gm",newLocation.horizontalAccuracy]; //表示海拔 altitudeLabel.text = [NSString stringWithFormat:@"%gm",newLocation.altitude]; // 垂直经度 verticalAccuracyLabel.text = [NSString stringWithFormat:@"%gm",newLocation.verticalAccuracy]; // CLLocation属性CLLocationDistance的对象计算两个位置间的距离 CLLocationDistance distance = [newLocation distanceFromLocation:startPoint]; // 将distance显示到Label上 distanceTraveledLabel.text = [NSString stringWithFormat:@"%gm",distance]; // 显示比例,MKCoordinateSpan类型的结构。 它有两个程序叫做 latitudeDelta and longitudeDelta。 这两个程序被用来设定地图的缩放级别——在center周围应该显示多大的区域。 MKCoordinateSpan span; span.latitudeDelta=0.05; span.longitudeDelta=0.05; MKCoordinateRegion region; // 获取定位的经纬度 region.center = newLocation.coordinate; // 显示区域 region.span = span; [mapView setRegion:region animated:YES]; }
//当设备无法定位当前我位置时候调用此方法 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSString *errorType = (error.code == kCLErrorDenied)?@"Access Denied" : @"Unknown Error"; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error getting Location" message:errorType delegate:nil cancelButtonTitle:@"oKay" otherButtonTitles: nil]; [alert show]; }
通过按钮跳转视图,显示地图
- (IBAction)mapViewSwitcher:(id)sender { [UIView beginAnimations:@"Curl" context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.25]; [UIView setAnimationTransition:UIViewAnimationOptionTransitionCurlUp forView:self.view cache:YES]; mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; // 显示用户位置 mapView.showsUserLocation = YES; // mapView.mapType = MKMapTypeSatellite; /* 设置地图类型 mapView.mapType = MKMapTypeStandard; 标准街道地图 mapView.mapType = MKMapTypeSatellite; 卫星地图 mapView.mapType = MKMapTypeHybrid; 混合地图 */ [self.view addSubview:mapView]; [mapView addSubview:mapSegmentedControl]; [UIView commitAnimations]; }
切换google三种地图显示
-(void)selectedMapType:(id)sender { UISegmentedControl *control = (UISegmentedControl *)sender; if (mapSegmentedControl) { if (control.selectedSegmentIndex == 0) { [UIView beginAnimations:@"Curl" context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.25]; [UIView setAnimationTransition:UIViewAnimationOptionTransitionCurlUp forView:self.view cache:YES]; mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; // 显示用户位置 mapView.showsUserLocation = YES; mapView.mapType = MKMapTypeStandard; [self.view addSubview:mapView]; [mapView addSubview:mapSegmentedControl]; [UIView commitAnimations]; NSLog(@"----0-->%d",mapSegmentedControl.selectedSegmentIndex); } else if (control.selectedSegmentIndex==1) { [UIView beginAnimations:@"Curl" context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.25]; [UIView setAnimationTransition:UIViewAnimationOptionTransitionCurlUp forView:self.view cache:YES]; mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; // 显示用户位置 mapView.showsUserLocation = YES; mapView.mapType = MKMapTypeSatellite; // mapView.mapType = MKMapTypeSatellite; [self.view addSubview:mapView]; [mapView addSubview:mapSegmentedControl]; [UIView commitAnimations]; NSLog(@"----1-->%d",mapSegmentedControl.selectedSegmentIndex); } else if (control.selectedSegmentIndex == 2) { [UIView beginAnimations:@"Curl" context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.25]; [UIView setAnimationTransition:UIViewAnimationOptionTransitionCurlUp forView:self.view cache:YES]; mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; // 显示用户位置 mapView.showsUserLocation = YES; mapView.mapType = MKMapTypeHybrid; // mapView.mapType = MKMapTypeSatellite; [self.view addSubview:mapView]; [mapView addSubview:mapSegmentedControl]; [UIView commitAnimations]; NSLog(@"----2-->%d",mapSegmentedControl.selectedSegmentIndex); } } }
发表评论
-
新风作浪博客学习(十九)在iOS虚拟键盘上添加动态隐藏按钮
2013-06-08 09:19 856为了给用户比较良好的交付,想在键盘上添加一个按钮,实时根据键盘 ... -
新风作浪博客学习(十八)openURL的使用(iOS调用系统电话、浏览器、地图、邮件等) .
2013-06-08 09:19 991今天遇见一行代码实现打开一个网页,比起印象里的UIWebVie ... -
新风作浪博客学习(十七)UIImageView响应点击事件 .
2013-06-08 09:19 701有时候会遇到点击一张图片,然后让这张图片触发一个事件,或者是跳 ... -
新风作浪博客学习(十六)Navigation + Tab Bar 常用组合框架 .
2013-06-07 08:50 1236看到很多项目中都采用的是Navigation加Tab Bar组 ... -
新风作浪博客学习(十四)怎样向iPhone模拟器中添加图片 .
2013-06-07 08:50 781在我们做项目中可能需要使用图库,模拟器是有图库的,但是如何像其 ... -
新风作浪博客学习(十三)表视图的分组分区和索引分区 .
2013-06-07 08:50 786本次实现的是表视图的分区和索引,代码和前面都差不多,主要还是代 ... -
新风作浪博客学习(十二)代码实现UITableViewCell表视图单元定制 .
2013-06-07 08:49 987通常情况下我们会希望单元格UITableViewCell显示自 ... -
新风作浪博客学习(十一)UITableViewCell的标记、移动、删除、插入 .
2013-06-06 09:15 1099这篇文章是建立在 代码实现 UITableView与UITa ... -
新风作浪博客学习(十)代码实现 UITableView与UITableViewCell .
2013-06-06 09:14 1151我们常用的表格类视图就是用 UITableView与UITab ... -
新风作浪博客学习(九)两个UIPickerView控件间的数据依赖 .
2013-06-06 09:14 1069本篇实现功能是两个选取器的关联操作,滚动第一个滚轮第二个滚 ... -
新风作浪博客学习(八)代码实现UIPickerView .
2013-06-06 09:14 1278先说一下当个组件选取器,我们创建一个数组NSAray来保存选取 ... -
新风作浪博客学习(七)代码 实现UIDatePicker控件 和 Tab Bar 视图切换 .
2013-06-06 09:15 1104感觉代码写控件都一个理,先在ViewDidLoad中创建控件对 ... -
新风作浪博客学习(六)ios 视图切换翻页效果 .
2013-06-05 11:18 1058本文写的是视图切换,涉及到的内容有 1.实现代码添加Navi ... -
新风作浪博客学习(五)代码实现UISlider 和 UISwitch .
2013-02-18 09:15 1134本次实现的UISlider和UISwi ... -
新风作浪博客学习(四)把plist里数据显示在textField上 .
2013-02-18 09:15 914在代码实现Lable 、textFie ... -
新风作浪博客学习(三)NSBundle读取图片 plist文件和txt文件
2013-02-18 09:15 1715本文想简单介绍一下NSBundle读取图片到视图上,读取pli ... -
新风作浪博客学习(二)代码实现Lable 、textField创建界面以及键盘的处理
2013-02-18 09:15 1172今天写的是用代码实现一个简单界面,代码重复率比较高,可读性不是 ... -
新风作浪博客学习(一)plist文件读写操作
2013-02-18 09:14 1357文件plist 全名Property List,属性列表文件, ... -
GCDiscreetNotificationView提示视图
2013-06-05 11:17 557先看一下效果图: [img] ... -
iphone开发之适配iphone5
2013-06-05 11:15 1089iphone5出来了,从不用适配的我们也要像android一样 ...
相关推荐
在iOS开发中,宏定义是Objective-C编程中一个非常实用的工具,它们可以用来简化代码、提高效率并增强代码的可读性。标题中的“iOS开发中那些高效常用的宏”指的是开发者在iOS应用开发过程中经常使用的宏定义,这些宏...
【讲正气 树新风】的学习小结主要围绕中华传统美德中的“朴实”展开讨论。在当前社会背景下,物质追求盛行,人们容易忽视道德规范和人格培养,导致价值观的扭曲。作者指出,朴实并不意味着过时,而是代表了一种淳朴...
本PPT学习教案着重讲解了新风系统设计的相关知识,包括新风量的确定、新风负荷的计算以及新风设备的选择和布置。 新风量的确定是新风系统设计的基础,它基于三个主要因素:卫生要求、补充局部排风量和保持空调房间...
专业新风系统资料PPT学习教案.pptx
新风系统设计是建筑环境工程中的重要组成部分,其主要目的是为室内环境提供清新、健康的空气,同时保持室内气候的适宜性。以下是对新风系统设计关键知识点的详细解析: 1. **新风定义**:新风指的是从室外引入的...
四年级小学生“讲文明、除陋习、树新风”演讲稿.doc
新风系统是一种用于室内空气质量改善的设备,它主要由风机、进风口、排风口和相关管道及接头组成。在不开启窗户的情况下,新风系统能够持续不断地将室外的新鲜空气引入室内,同时将室内的污浊空气排出,实现室内空气...
然而,根据给出的【标题】和【部分内容】,我们可以看出这是一个与“新风合同”相关的文件内容。该部分内容虽然显示的是经过OCR扫描后识别的文字,但内容的含义和结构显得支离破碎,缺乏明确的信息和上下文。 考虑...
五年级主题班会系列讲文明树新风通用PPT学习教案.pptx
新风系统,作为一种提高室内空气质量的有效手段,近年来在建筑领域得到了广泛应用。2019年的行业概览报告,结合了2020年的精品研究,为读者提供了全面深入的洞察,揭示了新风系统行业的最新趋势、市场规模、技术发展...
针对“小高层学校食堂餐饮楼空调新风排烟系统设计施工图”这个主题,我们可以深入探讨以下几个重要的知识点: 1. **空调系统设计**: - **负荷计算**:设计前需要对建筑物进行热负荷和湿负荷计算,以确定空调设备...
DDC新风机控制系统模块指导手册 DDC新风机控制系统模块是当前最常用的新风机控制系统之一,广泛应用于各类工业自动化领域。本文档提供了DDC新风机控制系统模块的指导手册,旨在帮助用户快速了解和掌握DDC新风机控制...
机房新风系统,也称为通风系统,是指一种可以提供给室内新鲜空气并排出室内污浊空气的环境系统。该系统通过持续不断地在室内和室外进行空气交换,帮助维持室内空气品质,同时具备节能特性。机房新风系统一般通过以下...
### Honeywell智能家居新风系统知识点解析 #### 一、引言 Honeywell智能家居新风系统用户手册旨在为用户提供全面的操作指南和维护建议,确保用户能够充分利用该系统带来的诸多好处。本手册主要针对Honeywell的HR150...
新风系统任务进度表.xlsx新风系统任务进度表.xlsx新风系统任务进度表.xlsx
新风系统设计是确保室内空气质量的关键,涉及到人体健康、能源效率和环境舒适度等多个方面。在新风系统设计中,首要任务是理解通风的基本概念及其目的。通风是通过自然或机械方式实现室内与室外空气的交换,以满足...
"美的新风机组技术手册" 美的新风机组技术手册是美的商用空调研发的新风处理机产品,该产品采用直接膨胀制冷的方法,通过室内换热器强劲而精确的加热和冷却能力来处理室外空气以接近室温的新风处理设备。该产品的...
新风系统设计标准是保障室内空气质量的关键因素,旨在提供健康、舒适的生活和工作环境。在中国,新风系统的设计遵循《室内空气质量标准》(GB/T18883-2002),其中规定了人均新风量不少于30立方米/小时。在实际设计...
新风系统源于欧洲,并逐渐发展成为一些国家的强制性安装标准,而中国则在近十几年内开始引入并应用。 新风系统的基本工作原理是通过系统主机和新风管道,将室内污染空气排出室外,同时引入经过过滤处理的新鲜空气,...