iPhone应用程序 了解Locate定位技术是本文要介绍的内容,其实使用iphone的定位系统开发软件是很简单的一件事,下面我们就来认识一下iphone的定位系统的使用。
1、Getting the User’s Current Location
获取用户当前位置。
获取位置的方式有三种:GPS, cell tower triangulation(蜂窝站点), 和 Wi-Fi Positioning Service (WPS).其中GPS是最精确的定位方式,但是在第一代iphone上没有。GPS是通过读取很多卫星微波信号来确定当前位置的。蜂窝站点通过 iphone周围的站点计算出来的,在蜂窝站点密集的地方使用这种技术可以达到一个准确的值,比如在城市但在蜂窝站点不密集的地方效果就没那么好了。最后一个WPS使用的是连接到Wi-Fi网络的IP地址来确定位置,这将会有较大的误差。这三种方式都会消耗大量的电。
怎么才能即实现定位功能又省电呢?下面的方法就可以解决:当使用Core Location时,可以选择精确度,谨慎的选择你所需要的准确度,可以帮助你省很多电。Core Location使用的技术隐藏在应用程序中。我们无需选择使用GPS、蜂窝站点技术还是WPS,我们只要告诉它我们需要的准确度它会自己决定选什么技术来满足我们的需求。
2.The Location Manager
Core Location的接口是很容易使用的。主要用到的类是CLLocationManager,就是通常说的Location Manager。为了使用Core Location我们需要创建Location Manager的实体:
1 CLLocationManager *locationManager = [[CLLocationManager alloc] init];
这样我们就创建了 Location Manager的实体,但是我们还没有开始定位。我们需要指派一个代理给Location Manager。当定位信息改变时Location Manager将调用代理方法。定位的过程会花一段时间平均几秒钟。代理方法必须遵循CLLocationManagerDelegate协议。
3、Setting the Desired Accuracy
设置代理后,你还要设置需要的准确度。就像我们刚刚说的精确度越高越耗电。如果你只是要是应用程序确定是哪个国家或是哪个州那么就不要设置很高的精确度。记住一点有时候你并不能得到你需要的精确度。
下面说一个设置代理和设置精确度的例子:
1 locationManager.delegate = self; 2 locationManager.desiredAccuracy = kCLLocationAccuracyBest;
精确度使用的是一个double类型的常量。单位是米,所以如果你设置desiredAccuracy=10那么精确度就是10米,这就告诉 Location Manager尽可能达到10米的精确度。还可以设置为其他常量:kCLLocationAccuracyBest,
- you can also use
- kCLLocationAccuracyNearestTenMeters,
- kCLLocationAccuracyHundredMeters,
- kCLLocationAccuracyKilometer,
- kCLLocationAccuracyThreeKilometers.
4、Setting the Distance Filter
默认情况是这样的,每当位置改变时Location Manager就调用一次代理。通过设置distance filter可以实现当位置改变超出一定范围时Location Manager才调用相应的代理方法。这样可以达到省电的目的。
例如:locationManager.distanceFilter = 1000.0f;
如果设置默认值:
- locationManager.distanceFilter = kCLDistanceFilterNone;
5、Starting the Location Manager
开始定位
当你转备好为定位消耗电池时我们可以调用
- [locationManager startUpdatingLocation];
来告诉 Location Manager开始定位
6、Using the Location Manager Wisely
如果你只需要确定当前位置而不需要进一步定位,当Location Manager查询到当前位置时需要通知代理停止定位。
停止方法: [locationManager stopUpdatingLocation];
7、he Location Manager Delegate
Location Manager必须遵守CLLocationManagerDelegate协议,CLLocationManagerDelegate协议定义了两个方法,并且这两个方法都是可选的。其中一个方法是当确定当前位置或是位置信息改变时调用。另一个方法是当遇到错误信息时调用
8、Getting Location Updates
当Location Manager想通知它的代理当前位置时,它会调用
- locationManager:didUpdateToLocation:fromLocation:
方法。
这个方法有3个参数第一个参数Location Manager。第二个参数是一个CLLocation对象用来确定当前位置,第三个是CLLocation 对象用来确定最近一次更新是的位置。该方法调用时,先前的location对象会被置空。
6、Getting Latitude and Longitude Using CLLocation
经纬度
位置信息是通过使用CLLocation类的实例从Location Manager那里得到的。这个类有7个属性。
CLLocation的属性说明
一、coordinate: 经纬度
coordinate.latitude:纬度
coordinate.longitude:经度
二、course:行驶方向
三、altitude:海拔高度
四、horizontalAccuracy:水平方向的精确度
为负值表示你不能依赖coordinate
五、verticalAccuracy:垂直方向的精确度
为负值表示无法确定有效的海拔
六、Speed:行驶速度
七、Timestamp:时间戳
CLLocation还有一个实例方法来告诉你的两个CLLocation对象之间的距离。这个方法叫:getDistanceFrom:
它是这样工作的:
- CLLocationDistance distance = [fromLocation getDistanceFrom:toLocation];
返回两个时间段内的距离,有时候它是不考虑海拔的,所以要自己计算距离。
7、Error Notifications
如果Core Location不能指定你当前的位置,它将调用。CLLocation的第二个代理方法:locationManager:didFailWithError:,最常见的是用户取消使用定位信息。
两种错误:
kCLErrorLocationUnknown = 0, // location is currently unknown, but CL will keep trying
kCLErrorDenied, // Access to location or ranging has been denied by the user
相关推荐
下面是 Keil C51 中变量、常量、函数定位的相关知识点: 一、代码定位 Keil C51 中有两种方法可以将代码定位到某个特定的存储器地址上: 1. 使用伪指令 CSEG:可以在 A51 文件中使用伪指令 CSEG 将代码定位到某个...
在日常工作中,我们经常会遇到需要快速定位某个文件的情况,传统的Windows搜索功能可能无法满足这种需求,这时,Locate32就发挥了它的优势。 Locate32的核心在于其采用的数据库技术。它会预先扫描用户指定的硬盘、...
在原始的`locate`命令中,它基于一个预先构建的文件系统数据库来快速定位文件,相比`find`命令,其优势在于搜索速度极快。`locate_3.11.7100_汉化`在此基础上进行了优化和本地化处理,不仅保留了快速搜索的功能,还...
它通过建立一个数据库来索引计算机上的文件和文件夹,这个数据库包含了文件名、大小、修改日期等重要信息,使得用户可以快速定位到需要的文件。与传统的逐个文件扫描不同,Locate32的预索引方式极大地提高了搜索速度...
Locate32,这款小巧而强大的文件定位工具,凭借其高效快速的搜索性能,在IT行业中赢得了众多用户的青睐。标题中的"HA_Locate32_v3189210.rar"指的是Locate32的特定版本——v3.1.8.9210汉化版,它不仅保留了原版的...
即便是面对包含大量隐藏文件和繁杂子目录的复杂文件结构,Locate32也能准确快速地定位到目标文件。这一功能对于那些资料庞杂的专业人士和研究人员来说,无疑是一大福音。 此外,Locate32还提供了许多人性化的设计,...
* 查找和 `pwd` 相关的所有文件:`locate pwd` * 查找所有包含 `kcpa` 的文件:`locate kcpa*` * 查找所有以 `ner` 结尾的文件:`locate *ner` locate 命令是 Linux 中一个非常有用的命令,能够快速搜索文件系统,...
《 Locate32:高效本地搜索工具的深度解析》 Locate32,作为一个小巧而强大的本地搜索工具,凭借其高效快速的搜索性能,在IT行业中赢得了众多用户的青睐。这个软件的最新版本是Locate32 v3.1 RC3l build 8220a,...
Locate32作为一款定位文件的极品工具,很好地解决了这一挑战。它不仅提供了快速的文件搜索功能,还通过其专业的数据库驱动搜索机制,大幅提高了工作效率。 Locate32的核心优势在于其索引机制。对于Windows系统的...
标题“SAT Locate_satellite_”和描述“Locate satellite Satellite Satellite”显然与卫星定位技术相关,特别是可能涉及一种名为“SAT Locate”的系统或服务。标签“satellite”进一步强化了这个主题,暗示我们讨论...
Project->Options for Target ...->BL51 Locate:Code 中填写如下内容: ?PR?_BCD2HEX?TOOLS(0x1000) 再次Build,在M51中会发现该函数已放在CODE MEMORY的0x1000处了 2.赋初值的变量定位 要将某变量定位在一...
在SQL查询中,`GROUP_CONCAT` 和 `LOCATE` 是两个非常实用的函数,它们分别用于处理分组数据的聚合和字符串定位。本篇文章将详细介绍这两个函数的用途以及它们如何联合使用,以帮助你更好地理解和应用在实际的数据库...
标题 "解决Can't locate ThreadQueue.pm" 指出的问题是,在尝试运行一个Perl脚本时,系统无法找到模块“ThreadQueue”。这个问题通常出现在你试图使用一个依赖于ThreadQueue模块的Perl程序,但该模块尚未在你的Perl...
Can’t locate ExtUtils/MakeMaker.pm in @INC (@INC contains: inc /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5
### 打开Vivado的.xpr工程文件报错Cannot Locate Target Loader的解决方案 #### 问题背景 在使用Xilinx Vivado设计工具进行FPGA/CPLD开发时,经常会遇到各种各样的问题,其中之一就是在尝试打开一个`.xpr`工程文件...
在iOS平台上,集成高德地图并实现持续定位是一项常见的需求,尤其对于开发地图导航或位置服务相关的应用来说至关重要。本文将深入探讨如何在iOS中利用高德地图SDK来获取持续定位,并提供相应的代码示例。 首先,...
《 Locate32:高效文件搜索利器详解》 在日常计算机操作中,我们常常需要快速查找某个文件或文件夹,尤其在处理大量数据时,传统的Windows资源管理器搜索可能显得力不从心。这时,专业的文件查找工具就显得尤为重要...
在应用的主活动中,初始化地图视图并设置相关参数,例如地图类型、缩放级别等。示例代码可能如下: ```java MapView mapView = findViewById(R.id.map_view); AMap aMap = mapView.getMap(); aMap.setMapType(A...
在局域网环境中,Locate 32可以帮助用户快速定位网络上的共享文件,这对于团队协作和文件共享非常有用。只需确保所有电脑都正确配置并允许网络访问,就能实现跨机器的快速搜索。 总的来说,Locate 32是一款强大的...