- 浏览: 538262 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
如今,配备GPS功能的移动设备越来越普遍了,使用GPS定位系统,可以精确地定位你当前所在的地理位置,但由于GPS接收机需要对准天空才能工作,因此在室内环境基本无用。
另一个找到自己所在位置的有效方法是使用手机基站,手机开机时,它会与周围的基站保持联系,如果你知道这些基站的身份,就可以使用各种数据库(包含基站的身份和它们的确切地理位置)计算出手机的物理位置。基站不需要卫星,和GPS不同,它对室内环境一样管用。但它没有GPS那样精确,它的精度取决于基站的密度,它在基站密集型区域的准确度最高。
提示:第一代iPhone并没有配置GPS接收器,基站方式不能应用到iPod Touch上,因为它不是手机。
第三种方法是依赖Wi-Fi,使用这种方法时,设备连接到Wi-Fi网络,通过检查服务提供商的数据确定位置,它既不依赖卫星,也不依赖基站,因此这个方法对于可以连接到Wi-Fi网络的区域有效,但它的精确度也是这三个方法中最差的。
定位框架内核
在iPhone上,苹果提供了定位框架内核,以帮助你确定你的物理位置,这个框架的美妙之处在于它使用了前面提到的所有三种方法,具体使用的是哪种方法对于开发者来说是透明的,开发人员只需要指定所需要的精度,定位内核将会以最佳方式确定定位结果。
你一定感到很吃惊吧?!本文其余部分将向你展示这是如何做到的。
获取位置坐标
使用Xcode,创建一个新的基于视图的应用程序项目,取名为LBS,在新项目中,双击LBSViewController.xib文件,在界面设计工具中编辑它。使用下面的组件填充视图窗口,如图1所示。
l Label
l TextField
图 1 位置视图实例:用Label和TextFiled填充这个窗口
在Xcode中框架组上点击右键,选择“添加”*“现有框架”,选择“Framework/CoreLocation.framework”,向LBSViewController.h文件中添加以下粗体字显示的代码:
#import <CoreLocation/CoreLocation.h>
@interface LBSViewController : UIViewController
<CLLocationManagerDelegate> {
IBOutlet UITextField *latitudeTextField;
IBOutlet UITextField *longitudeTextField;
IBOutlet UITextField *accuracyTextField;
CLLocationManager *lm;
}
@property (retain, nonatomic) UITextField *latitudeTextField;
@property (retain, nonatomic) UITextField *longitudeTextField;
@property (retain, nonatomic) UITextField *accuracyTextField;
@end
若要使用CLLocationManager类,需要在你的视图控制器类中实现CLLocationManagerDelegate协议,还需要创建三个出口用于连接视图窗口中的三个TextFiled视图。
回到界面编辑器,单击并拖动文档的所有者项目到三个TextField视图,然后分别选择latitudeTextField,longitudeTextField和accuracyTextField。
在LBSViewController.m文件中查询以下代码中的粗体部分:
@implementation LBSViewController
@synthesize latitudeTextField, longitudeTextField, accuracyTextField;
- (void) viewDidLoad {
lm = [[CLLocationManager alloc] init];
if ([lm locationServicesEnabled]) {
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
lm.distanceFilter = 1000.0f;
[lm startUpdatingLocation];
}
}
- (void) locationManager: (CLLocationManager *) manager
didUpdateToLocation: (CLLocation *) newLocation
fromLocation: (CLLocation *) oldLocation{
NSString *lat = [[NSString alloc] initWithFormat:@"%g",
newLocation.coordinate.latitude];
latitudeTextField.text = lat;
NSString *lng = [[NSString alloc] initWithFormat:@"%g",
newLocation.coordinate.longitude];
longitudeTextField.text = lng;
NSString *acc = [[NSString alloc] initWithFormat:@"%g",
newLocation.horizontalAccuracy];
accuracyTextField.text = acc;
[acc release];
[lat release];
[lng release];
}
- (void) locationManager: (CLLocationManager *) manager
didFailWithError: (NSError *) error {
NSString *msg = [[NSString alloc]
initWithString:@"Error obtaining location"];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Error"
message:msg
delegate:nil
cancelButtonTitle: @"Done"
otherButtonTitles:nil];
[alert show];
[msg release];
[alert release];
}
- (void) dealloc{
[lm release];
[latitudeTextField release];
[longitudeTextField release];
[accuracyTextField release];
[super dealloc];
}
前面的代码创建了CLLocationManager类的一个实例,在使用对象之前,你应该检查用户是否开启了设备的定位服务,如果开启了,你可以使用desiredAccuracy属性指定想要的精度,使用下面的常量指定想要的精度:
l kCLLocationAccuracyBest
l kCLLocationAccuracyNearestTenMeters
l kCLLocationAccuracyHundredMeters
l kCLLocationAccuracyKilometer
l kCLLocationAccuracyThreeKilometers
distanceFilter属性让你指定设备必须移动多少距离位置信息才会更新,这个属性的单位是米。如果你想得到所有移动的通知,可以使用kCLDistanceFilterNone常量,最后,使用startUpdatingLocation方法启动位置管理器。
要获得位置信息,需处理下面两个事件:
l locationManager:didUpdateToLocation:fromLocation:
l locationManager:didFailWithError:
当获得一个新的定位值时,设备触发locationManager:didUpdateToLocation:fromLocation:事件,如果位置管理器不能确定位置信息,就会触发locationManager:didFailWithError:事件。
当设备可以确定位置时,你可能想显示经纬度值和精度,这时你可以使用CLLocation对象,它的horizontalAccuracy属性可以指定精度范围,单位是米。
按Command-r在iPhone模拟器上测试该程序,图2显示了模拟器显示的位置经纬度值,同时显示了精度。
图 2 定位测试:当你在iPhone模拟器上测试该示例程序时,总会显示这些固定的值
显示地图
如果能将位置坐标定位到地图上显示将会更有趣,幸运的是,iPhone 3.0 SDK包括了Map Kit API,它可以让你在程序中显示Google Map,下面以一个例子进行说明。
还是使用前面创建的项目,在LBSViewController.xib文件中视图窗口上增加一个按钮,如图3所示。
图 3 View Map按钮:增加按钮后的样子
在Xcode中框架组上点击右键,增加一个新的框架MapKit.framework。在LBSViewController.h文件中添加下列代码中的粗体部分:
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
@interface LBSViewController : UIViewController
<CLLocationManagerDelegate> {
IBOutlet UITextField *accuracyTextField;
IBOutlet UITextField *latitudeTextField;
IBOutlet UITextField *longitudeTextField;
CLLocationManager *lm;
MKMapView *mapView;
}
@property (retain, nonatomic) UITextField *accuracyTextField;
@property (retain, nonatomic) UITextField *latitudeTextField;
@property (retain, nonatomic) UITextField *longitudeTextField;
-(IBAction) btnViewMap: (id) sender;
@end
回到界面编辑器,拖动按钮到文件的所有者项目上,然后选择btnViewMap:。
在LBSViewController.m文件中,添加下列代码中的粗体部分:
[self.view addSubview:mapView];
}
- (void) viewDidLoad {
lm = [[CLLocationManager alloc] init];
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
lm.distanceFilter = 1000.0f;
[lm startUpdatingLocation];
mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
mapView.mapType = MKMapTypeHybrid;
}
- (void) locationManager: (CLLocationManager *) manager
didUpdateToLocation: (CLLocation *) newLocation
fromLocation: (CLLocation *) oldLocation{
NSString *lat = [[NSString alloc] initWithFormat:@"%g",
newLocation.coordinate.latitude];
latitudeTextField.text = lat;
NSString *lng = [[NSString alloc] initWithFormat:@"%g",
newLocation.coordinate.longitude];
longitudeTextField.text = lng;
NSString *acc = [[NSString alloc] initWithFormat:@"%g",
newLocation.horizontalAccuracy];
accuracyTextField.text = acc;
[acc release];
[lat release];
[lng release];
MKCoordinateSpan span;
span.latitudeDelta=.005;
span.longitudeDelta=.005;
MKCoordinateRegion region;
region.center = newLocation.coordinate;
region.span=span;
[mapView setRegion:region animated:TRUE];
}
- (void) dealloc{
[mapView release];
[lm release];
[latitudeTextField release];
[longitudeTextField release];
[accuracyTextField release];
[super dealloc];
}
代码解释:
l 当视图载入时创建一个MKMapView类的实例,设置显示的地图类型。
l 当用户点击View Map按钮时,在当前视图上增加mapView对象。
l 当位置信息得到更新时,使用mapView对象的setRegion:方法放大地图。
在iPhone模拟器中按Command-r测试该程序,点击View Map按钮将会显示一个包含位置管理器返回位置的地图。如图4所示。
图 4 地图位置:通过定位内核框架显示地图位置
因为模拟器始终显示的是相同的位置,如果你有一部iPhone手机也可以真实地感受一下,当你移动位置时,你会看到地图会自动更新。将distanceFilter属性设置得小一点,这样可以增强跟踪体验。
正如你所看到的,iPhone SDK的定位内核框架让你可以很容易实现基于位置的设备,此外,MapKit(包括在iPhone SDK中)可以在地图上显示位置信息。如果没有创建过基于位置的应用,我想你看完本文就应该动手一试,还等什么呢?
转载自:http://tech.it168.com/a2009/1010/755/000000755387.shtml
发表评论
-
iOS App性能优化
2014-01-03 11:23 1695http://www.hrchen.com/2013/05/ ... -
iOS多线程编程Part 3/3 - GCD
2014-01-03 11:21 1650http://www.hrchen.com/2013/07/ ... -
iOS多线程编程Part 2/3 - NSOperation
2014-01-03 11:20 4546http://www.hrchen.com/2013/06/ ... -
iOS多线程编程Part 1/3 - NSThread & Run Loop
2014-01-03 11:17 7107http://www.hrchen.com/2013/06/ ... -
iOS移动网络环境调优那些事[转]
2014-01-02 17:10 2701http://xiangwangfeng.com/201 ... -
生成APNS Service证书的步骤[转]
2013-05-23 09:19 5678要进行推送服务的第一件事就是获取推送证书。它用来对你通过SS ... -
xcode 环境,多工程联编设置【转】
2013-02-28 21:59 8965http://blog.csdn.net/vienna_zj ... -
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 967随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1141http://beforweb.com/node/134 ... -
【转】深度技术分析“为什么ios比android流畅”
2012-09-23 19:41 1439原文 Andorid更新了一个版本又一个版本,硬 ... -
Iphone开发
2012-09-17 22:46 12071. NSClassFromString 这个方法 ... -
HowTo: Install iPhone SDK 2.0 – 3.1 for XCode 3.2[转]
2012-09-06 09:00 1224原文链接 So… you’ve installe ... -
Xcode 中设置部分文件ARC支持[转]
2012-08-03 10:57 1737ARC是什么 ARC是iOS 5推出的新功 ... -
xcode4 设置调试错误信息小结【转】
2012-07-19 14:37 1812方案1:NSZombieEnabled 先选中工程, ... -
Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial【转】
2012-07-19 14:36 1268Finding iPhone Memory Lea ... -
[Cocoa]XCode的一些调试技巧【转】
2012-07-19 14:35 1207XCode 内置GDB,我们可以在命令行中使用 GDB ... -
[IPhone]如何使用Leak检查内存泄漏[转]
2012-07-19 14:34 1236简介 在IPhone程式开发中,记忆体泄漏(内存泄漏)是 ... -
获得通讯录中联系人的所有属性[转]
2012-06-21 14:04 1616获得通讯录中联系人的所有属性 ,看代码: ABAdd ... -
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转]
2012-06-20 23:51 16423------------------------------- ... -
shouldAutorotateToInterfaceOrientation 不触发或者不执行的问题[转]
2012-06-20 22:58 1463今天遇到一个很郁闷 ...
相关推荐
在iOS开发中,获取iPhone设备的GPS位置信息是常见的需求,这主要涉及到Core Location框架的使用。本示例将深入探讨如何通过GPS获取iPhone的经纬度坐标,以及相关的知识点。 首先,我们需要导入Core Location框架,...
本示例"iPhone GPS定位简单demo"主要聚焦于如何在iPhone应用中使用Core Location框架来获取设备的实时地理位置信息,并通过Google地图API进行经纬度定位。以下是关于这个主题的详细知识点: 1. **Core Location框架...
当iPhone开启GPS功能时,设备能够接收到卫星信号,并通过解码信号中的数据来确定自己的地理位置。然而,由于GPS接收机需要直接接收到卫星信号,因此在室内环境中通常无法正常工作。 ##### 2.2 基站定位 基站定位...
LBS 一款PHP位置信息服务程序,利用移动终端(如手机,iPad..)的GPS定位系统来确认用户地理位置(经纬度)从而来提供一系列的服务。国外的有Foursquare,国内的街旁,玩转四方....,虽然大多还只是停留在签到的应用,但...
时区设置通常是自动的,iPhone会根据你的物理位置,通过GPS、蜂窝数据或Wi-Fi网络来获取并更新正确的时区。当你的iPhone连接到无线网络或者开启定位服务时,系统会自动检测你所在的地理位置,并将设备时间调整到该...
标题中的“让照片在Apple(iPhone / iPad)上显示在地图中正确的位置”是指通过特定的方法或工具,将照片的地理定位信息与Apple设备的地图应用相结合,使得照片可以在地图上显示出其拍摄时的确切位置。这涉及到照片...
在iOS开发中,"iPhone地理位置导航"涉及到的关键技术主要包括地理位置获取和GPS定位,这些功能的实现通常基于Apple的UIKit框架以及可能使用的第三方服务,如Google Maps API。在本项目中,我们将深入探讨这两个核心...
这些小程序通常会利用设备的内置传感器和GPS数据,实时显示海拔信息。用户只需打开应用,确保手机的定位服务已开启,它就会自动开始测量。部分应用还提供了历史记录、地图视图等功能,以便用户查看过去的海拔变化...
接着,定位iPhone和iPad是iCloud的一个重要功能,它基于设备上的GPS、Wi-Fi和蜂窝数据进行。通过iCloud,我们可以远程查询设备的位置,这对于查找丢失或被盗的设备非常有用。实现这个功能需要调用iCloud的定位API,...
基于matlab实现采用gps、里程计和... 本文采用的方法是利用iphone手机上的GPS来获取载体的经纬度,利用电子罗盘获取到航向角,通过加速度计积分得到位移(加速度的功能替代来里程计),再通过EKF融合得到最终的位置。
描述中的"Get gps location iPhone Location"进一步确认了这一点,说明该应用或代码的主要功能是获取iPhone的GPS定位信息。这通常涉及到iOS系统提供的Core Location框架,它是Apple提供的一套API,用于获取设备的...
在描述中,“iPhone SDK : Get gps location latitude longitude”进一步确认了这个项目的核心功能,即通过iPhone的SDK(Software Development Kit)获取GPS坐标。在iOS开发中,开发者通常会利用Core Location框架来...
1. **用户设备信息**:这通常包括但不限于设备型号(如iPhone X或Samsung Galaxy S20)、操作系统版本(iOS 14.5或Android 11)、屏幕分辨率、处理器信息、内存大小、存储空间、网络状态(WiFi或蜂窝数据)以及设备...
在IT行业中,尤其是在移动应用开发领域,获取用户设备...综上所述,"卡卡汽车"小程序获取用户设备信息是为了提供更优质的服务,优化用户体验,并进行有效的业务分析。开发者需谨慎处理这些信息,确保用户隐私得到保障。
1. 实时定位:iPhone防盗犬通过GPS定位功能,能够在手机丢失后实时追踪其位置,让用户能够迅速找到手机的大致方位。此外,它还能结合Wi-Fi和移动网络进行定位,即便手机被关闭或移除SIM卡,也能在连接网络时获取位置...
6. **地理位置**:如果用户允许,可以获取设备的GPS坐标或其他定位信息,为提供本地化服务提供支持。 7. **权限管理**:检查应用所需权限是否已获得,如访问联系人、相机、麦克风等。 8. **电池状态**:电量、充电...
通过该工具,用户能够收集到关于Wi-Fi设备的大量信息,包括但不限于MAC地址、SSID探测请求等,并利用这些数据进行精确的位置定位。iSniff_GPS主要由Python编写,结合了Scapy库的强大功能以及Django后端数据库的支持...
开发者需要了解如何在编程中调用这些传感器,获取数据,并将这些数据应用到他们的应用程序中。这涉及到iOS的Core Motion框架,该框架提供了与各种运动相关传感器交互的接口。 3. 编程语言和开发环境: 开发者需要...
4. 健康与运动:运动追踪类应用利用location-cleaned驱动提供的定位信息,能够准确记录用户的运动轨迹和距离。 总结,location-cleaned驱动是iOS 15.0中定位服务的一大亮点,它通过数据清洗、隐私保护和性能优化,...
- GPS定位服务的应用 - 加速度传感器与陀螺仪的数据读取 - 摄像头与麦克风的控制 ##### 第五部分:附录 - **附录A**:练习题答案 - **附录B**:Xcode使用指南 - **附录C**:Interface Builder使用指南 - **附录D...